k8s 배치 지속 통합 환경

k8s 배치 지속 통합 환경
설치 전 준비: 방화벽 을 닫 고 selinux 를 닫 고 docker - ce1 을 설치 합 니 다. harbor 는 앞의 노트 2 를 참고 하여 git 를 설치 하고 설정 합 니 다. 앞의 노트 3 을 참고 하여 git 에 nfs 서버 를 배치 하고 각 노드 에 nfs - utils 클 라 이언 트 4 를 설치 합 니 다.nfs - client - provisioner 클 라 이언 트 cat class. yaml api 버 전: storage. k8s. io / v1kind: StorageClassmetadata: name: managed - nfs - storageprovisioner: fuseim. pri / ifs \ # 또는 다른 이름 을 선택 하려 면 배포 의 env PROVISIONER 와 일치 해 야 합 니 다.NAME'parameters:archiveOnDelete: "true"
cat deployment.yaml apiVersion: v1kind: ServiceAccountmetadata:name: nfs-client-provisioner
kind: DeploymentapiVersion: extensions/v1beta1metadata:name: nfs-client-provisionerspec:replicas: 1strategy:type: Recreatetemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:
  • name: nfs-client-provisionerimage: lizhenliang/nfs-client-provisioner:latestvolumeMounts:
  • name: nfs-client-rootmountPath: /persistentvolumesenv:
  • name: PROVISIONER_NAMEvalue: fuseim.pri/ifs
  • name: NFS_SERVERvalue: 192.168.31.64
  • name: NFS_PATHvalue: /ifs/kubernetesvolumes:

  • name: nfs-client-rootnfs:server: 192.168.31.64path: /ifs/kubernetescat rbac.yaml kind: ServiceAccountapiVersion: v1metadata:name: nfs-client-provisioner kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata:name: nfs-client-provisioner-runnerrules:
  • apiGroups: [""]resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"]
  • apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"]
  • apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get", "list", "watch"]
  • apiGroups: [""]resources: ["events"]verbs: ["create", "update", "patch"] kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:name: run-nfs-client-provisionersubjects:
  • kind: ServiceAccountname: nfs-client-provisionernamespace: defaultroleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io kind: RoleapiVersion: rbac.authorization.k8s.io/v1metadata:name: leader-locking-nfs-client-provisionerrules:
  • apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"] kind: RoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:name: leader-locking-nfs-client-provisionersubjects:
  • kind: ServiceAccountname: nfs - client - provisioner replace with namespace where provisioner is deployed namespace: defaultrole Ref: kind: Rolename: leader - locking - nfs - client - provisionerapi Group: rbac. authorization. k8s. io 5, jenkins 서비스 기 를 배치 하려 면 k8s 의 core - dns 를 배치 해 야 합 니 다 (coredns 를 설치 하여 앞의 노트 를 보십시오).그렇지 않 으 면 분석 을 할 수 없 으 면 플러그 인 cat ingress. yml api 버 전: extensions / v1beta1kind: Ingressmetadata: name: jenkinsannotations: nginx. ingress. kubernetes. io / ssl - redirect: "true" kubernetes. io / tls - acme: "true" 플러그 인 을 올 리 면 기본 값 을 초과 하면 "413 Request Entity Too Large" 를 보고 하고 clientmax_body_size nginx. ingress. kubernetes. io / proxy - body - size: 50mnginx. ingress. kubernetes. io / proxy - request - buffering: "off" nginx - ingress controller 버 전 은 0.9.0. beta - 18 보다 작 습 니 다. ingress. kubernetes. io / ssl - redirect: "true" ingress. kubernetes. io / proxy - body - size: 50mingress. kubernetes. io / proxy - request - buffering: "off" spec: rules:
  • host: jenkins.example.comhttp:paths:
  • path: / backend: serviceName: jenkinsservicePort: 80cat rbac. yml 에서 jenkins 라 는 ServiceAccount api 버 전: v1kind: ServiceAccountmetadata: name: jenkins
  • 를 만 듭 니 다.


    jenkins 라 는 Role 을 만 들 고 API 그룹 을 관리 할 수 있 는 자원 Pod 를 부여 합 니 다.
    kind: RoleapiVersion: rbac.authorization.k8s.io/v1beta1metadata:name: jenkinsrules:
  • apiGroups: [""]resources: ["pods"]verbs: ["create","delete","get","list","patch","update","watch"]
  • apiGroups: [""]resources: ["pods/exec"]verbs: ["create","delete","get","list","patch","update","watch"]
  • apiGroups: [""]resources: ["pods/log"]verbs: ["get","list","watch"]
  • apiGroups: [""]resources: ["secrets"]verbs: ["get"]

  • jenkins 라 는 Role 을 jenkins 라 는 ServiceAccount 에 연결 합 니 다.
    apiVersion: rbac.authorization.k8s.io/v1beta1kind: RoleBindingmetadata:name: jenkinsroleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: jenkinssubjects:
  • kind: ServiceAccountname: jenkins

  • cat service.yml apiVersion: v1kind: Servicemetadata:name: jenkinsspec:selector:name: jenkinstype: NodePortports:
      name: http
      port: 80
      targetPort: 8080
      protocol: TCP
      nodePort: 30006
    -
      name: agent
      port: 50000
      protocol: TCP

    cat statefulset.yml apiVersion: apps/v1beta1kind: StatefulSetmetadata:name: jenkinslabels:name: jenkinsspec:serviceName: jenkinsreplicas: 1updateStrategy:type: RollingUpdatetemplate:metadata:name: jenkinslabels:name: jenkinsspec:terminationGracePeriodSeconds: 10serviceAccountName: jenkinscontainers: (dns 가 해석 할 수 없 는 상황 이 발생 하면 container 라 는 줄 에 dnsPolicy: Default 를 추가 해 야 합 니 다)
  • name: jenkinsimage: jenkins/jenkinsimagePullPolicy: Alwaysports:
  • containerPort: 8080
  • containerPort: 50000resources:limits:cpu: 1memory: 1Girequests:cpu: 0.5memory: 500Mienv:
  • name: LIMITS_MEMORYvalueFrom:resourceFieldRef:resource: limits.memorydivisor: 1Mi
  • name: JAVA_OPTSvalue: -Xmx$(LIMITS_MEMORY)m -XshowSettings:vm -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85volumeMounts:
  • name: jenkins-homemountPath: /var/jenkins_homelivenessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 60timeoutSeconds: 5failureThreshold: 12readinessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 60timeoutSeconds: 5failureThreshold: 12securityContext:fsGroup: 1000volumeClaimTemplates:
  • metadata: name: jenkins - homespec: storageClassName: "managed - nfs - storage" accessModes: ["ReadWrite Once"] resources: requests: storage: 1Gi 6, 이 몇 개의 Yml 파일 을 사용 하여 jenkinsPS 를 시작 합 니 다. 다음 오류 가 발생 했 을 때 'FailedCreate' create Pod jenkins - 0 in StatefulSet jenkins failed error: pods "jenkins - 0"is forbidden: pod. Spec. Security Context. FSGroup is forbidden 수정 / opt / kubernetes / cfg / kube - apiserver, 보안 필드 삭제 Security Context 7, 브 라 우 저 로 접근http://10.1.2.190:30006설치 진행 (kubectl get svc - o wide 를 사용 하여 jenkins 가 현재 190 이 pod 에서 실행 중인 지 확인)8. 설치 할 때 어떠한 플러그 인 도 선택 하지 않 고 수 동 으로 플러그 인 을 설치 하고 git 와 kubernetes 플러그 인 을 설치 합 니 다

  • 좋은 웹페이지 즐겨찾기