Jenkins的kubernetes-plugin在执行构建时会在kubernetes集群中自动创建一个Pod,并在Pod内部创建一个名为jnlp的容器,该容器会连接Jenkins并运行Agent程序,形成一个Jenkins的Master和Slave架构,然后Slave会执行构建脚本进行构建,但如果构建内容是要创建Docker Image就要实现Docker In Docker方案(在Docker里运行Docker),如果要在集群集群内部进行部署操作可以使用kubectl执行命令,要解决kubectl的安装和权限分配问题。

因为默认的jnlp容器可以执行的命令比较少,所以要实现Docker In Docker和执行kubectl命令,就要自定义构建Docker Image,因为一个Pod内部可以运行多个容器,所以可以用自定义的Docker容器实现上述目的。

构建自定义镜像:

  1. FROM scratch
  2. ADD centos-7-x86_64-docker.tar.xz /
  3. LABEL \
  4. org.label-schema.schema-version="1.0" \
  5. org.label-schema.name="CentOS Base Image" \
  6. org.label-schema.vendor="CentOS" \
  7. org.label-schema.license="GPLv2" \
  8. org.label-schema.build-date="20200504" \
  9. org.opencontainers.image.title="CentOS Base Image" \
  10. org.opencontainers.image.vendor="CentOS" \
  11. org.opencontainers.image.licenses="GPL-2.0-only" \
  12. org.opencontainers.image.created="2020-05-04 00:00:00+01:00"
  13. USER root
  14. COPY docker-ce.repo /etc/yum.repos.d/docker-ce.repo
  15. COPY kubernetes.repo /etc/yum.repos.d/kubernetes.repo
  16. RUN yum install -y docker-ce kubectl
  17. RUN systemctl enable docker
  18. CMD ["/bin/bash"]

需要的文件下载

更多镜像

  1. # 构建命令
  2. docker build -t bluersw/centos-7-docker-kubectl:2.0 .
  3. # 试运行命令
  4. docker run -v /var/run/docker.sock:/var/run/docker.sock -it bluersw/centos-7-docker-kubectl:2.0 /bin/bash
  5. # Pull命令
  6. docker pull bluersw/centos-7-docker-kubectl:2.0

运行容器时需要将宿主机的/var/run/docker.sock挂载到容器中去,因为容器内运行不了Docker Daemon,但这样有安全隐患因为可以通过docker.sock提权进而获得宿主机root权限,所以只能运行安全可靠的镜像。

为了方便配置一个Pod Templates,在配置kubernetes连接内容的下面,这里的模板只是模板(与类一样使用时还要实例化过程),名称和标签列表不要以为是Pod的name和label,这里的名称和标签列表只是Jenkins查找选择模板时使用的,Jenkins自动创建Pod的name是项目名称+随机字母的组合,所以我们填写jenkins-slave-temp,命名空间填写jenkins-ops(创建命令:kubectl create namespace jenkins-ops),Pod内添加一个容器名称是jnlp-docker(默认的jnlp容器会自动创建),Docker镜像填写:repo.bluersw.com:8083/bluersw/centos-7-docker-kubectl:2.0,repo.bluersw.com:8083是家里的Docker私有仓库(搭建Docker私有仓库),下面增加两个Host Path Volume:/var/run/docker.sock、/etc/docker/daemon.json,保存回到系统管理页面。

Alt text
Alt text

修改构建脚本

  1. podTemplate (inheritFrom: "jenkins-slave-temp"){
  2. node(POD_LABEL) {
  3. container('jnlp'){
  4. stage('Run shell') {
  5. sh 'echo hello world'
  6. }
  7. }
  8. container('jnlp-docker'){
  9. stage("Run docker"){
  10. sh 'docker info'
  11. }
  12. }
  13. }
  14. }
  • podTemplate:用Pod模版示例化一个Pod配置并在kubernetes内自动创建
  • inheritFrom:意思是创建的Pod配置继承自jenkins-slave-temp模版
  • POD_LABEL:自动创建Pod的label
  • container:选择哪个容器执行脚本

执行构建结果:

  1. Running on jenkins-test-10-dp8sp-8zxtg-m4x35 in /home/jenkins/agent/workspace/Jenkins-Test
  2. [Pipeline] {
  3. [Pipeline] container
  4. [Pipeline] {
  5. [Pipeline] stage
  6. [Pipeline] { (Run shell)
  7. [Pipeline] sh
  8. + echo hello world
  9. hello world
  10. [Pipeline] }
  11. [Pipeline] // stage
  12. [Pipeline] }
  13. [Pipeline] // container
  14. [Pipeline] container
  15. [Pipeline] {
  16. [Pipeline] stage
  17. [Pipeline] { (Run docker)
  18. [Pipeline] sh
  19. + docker info
  20. Client:
  21. Debug Mode: false
  22. Server:
  23. Containers: 32
  24. Running: 19
  25. Paused: 0
  26. Stopped: 13
  27. Images: 11
  28. Server Version: 19.03.9
  29. Storage Driver: overlay2
  30. Backing Filesystem: xfs
  31. Supports d_type: true
  32. Native Overlay Diff: true
  33. Logging Driver: json-file
  34. Cgroup Driver: cgroupfs
  35. Plugins:
  36. Volume: local
  37. Network: bridge host ipvlan macvlan null overlay
  38. Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
  39. Swarm: inactive
  40. Runtimes: runc
  41. Default Runtime: runc
  42. Init Binary: docker-init
  43. containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
  44. runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
  45. init version: fec3683
  46. Security Options:
  47. seccomp
  48. Profile: default
  49. Kernel Version: 4.4.224-1.el7.elrepo.x86_64
  50. Operating System: CentOS Linux 7 (Core)
  51. OSType: linux
  52. Architecture: x86_64
  53. CPUs: 4
  54. Total Memory: 3.858GiB
  55. Name: centos7-k8s-node1
  56. ID: 3R5I:DJGZ:YRZY:ESCH:VW7H:VGAD:5SCC:GYZV:QZZS:EX5M:MV3N:246K
  57. Docker Root Dir: /var/lib/docker
  58. Debug Mode: false
  59. Registry: https://index.docker.io/v1/
  60. Labels:
  61. Experimental: false
  62. Insecure Registries:
  63. repo.bluersw.com:8083
  64. repo.bluersw.com:8082
  65. 127.0.0.0/8
  66. Live Restore Enabled: false
  67. [Pipeline] }
  68. [Pipeline] // stage
  69. [Pipeline] }
  70. [Pipeline] // container
  71. [Pipeline] }
  72. [Pipeline] // node
  73. [Pipeline] }
  74. [Pipeline] // podTemplate
  75. [Pipeline] End of Pipeline
  76. Finished: SUCCESS

注意:我K8S集群使用root运行的所以权限很高,你如果使用其他账号运行的K8S集群,会遇到/var/run/docker.sock没有访问权限的问题,因为Docker必须是root权限运行,解决办法是:

  1. # Docker 服务重启要重新执行
  2. chmod 777 /var/run/docker.sock

在所有Node节点上执行:

  1. mkdir -p $HOME/.kube
  2. cp -i /etc/kubernetes/kubelet.conf $HOME/.kube/config
  3. chown $(id -u):$(id -g) $HOME/.kube/config
  4. # 测试一下
  5. kubectl get pod -A

在Pod Templates配置中增加两个Host Path Volume:/root/.kube、/var/lib/kubelet/pki/

Alt text

修改构建脚本:

  1. podTemplate (inheritFrom: "jenkins-slave-temp"){
  2. node(POD_LABEL) {
  3. container('jnlp'){
  4. stage('Run shell') {
  5. sh 'echo hello world'
  6. }
  7. }
  8. container('jnlp-docker'){
  9. stage("Run docker"){
  10. sh 'kubectl get pods -A'
  11. }
  12. }
  13. }
  14. }

运行结果:

  1. Running on jenkins-test-11-7m94s-nxrj4-j2z0g in /home/jenkins/agent/workspace/Jenkins-Test
  2. [Pipeline] {
  3. [Pipeline] container
  4. [Pipeline] {
  5. [Pipeline] stage
  6. [Pipeline] { (Run shell)
  7. [Pipeline] sh
  8. + echo hello world
  9. hello world
  10. [Pipeline] }
  11. [Pipeline] // stage
  12. [Pipeline] }
  13. [Pipeline] // container
  14. [Pipeline] container
  15. [Pipeline] {
  16. [Pipeline] stage
  17. [Pipeline] { (Run docker)
  18. [Pipeline] sh
  19. + kubectl get pods -A
  20. NAMESPACE NAME READY STATUS RESTARTS AGE
  21. jenkins-ops jenkins-test-11-7m94s-nxrj4-j2z0g 2/2 Running 0 15s
  22. kube-system coredns-7ff77c879f-ck49p 1/1 Running 9 5d2h
  23. kube-system coredns-7ff77c879f-d2xfc 1/1 Running 10 5d2h
  24. kube-system dnsutils 1/1 Running 16 5d1h
  25. kube-system etcd-centos7-k8s-master 1/1 Running 11 5d2h
  26. kube-system kube-apiserver-centos7-k8s-master 1/1 Running 6 4d
  27. kube-system kube-controller-manager-centos7-k8s-master 1/1 Running 12 5d2h
  28. kube-system kube-flannel-ds-amd64-52vcn 1/1 Running 9 5d1h
  29. kube-system kube-flannel-ds-amd64-vtw58 1/1 Running 12 5d1h
  30. kube-system kube-flannel-ds-amd64-xm8d5 1/1 Running 10 5d1h
  31. kube-system kube-proxy-l8875 1/1 Running 18 5d1h
  32. kube-system kube-proxy-p5fdr 1/1 Running 9 5d1h
  33. kube-system kube-proxy-pdvz2 1/1 Running 16 5d1h
  34. kube-system kube-scheduler-centos7-k8s-master 1/1 Running 10 5d2h
  35. kube-system metrics-server-7f6d95d688-vjsbj 1/1 Running 7 4d
  36. kubernetes-dashboard dashboard-metrics-scraper-6b4884c9d5-8hblg 1/1 Running 7 4d
  37. kubernetes-dashboard kubernetes-dashboard-7b544877d5-tz4xj 1/1 Running 7 4d
  38. nginx-ingress coffee-5f56ff9788-2745d 1/1 Running 6 3d23h
  39. nginx-ingress coffee-5f56ff9788-c8jlx 1/1 Running 6 3d23h
  40. nginx-ingress nginx-ingress-hjqzc 1/1 Running 6 3d23h
  41. nginx-ingress nginx-ingress-jfh6h 1/1 Running 6 3d23h
  42. nginx-ingress tea-69c99ff568-cpp2k 1/1 Running 6 3d23h
  43. nginx-ingress tea-69c99ff568-rmnr2 1/1 Running 6 3d23h
  44. [Pipeline] }
  45. [Pipeline] // stage
  46. [Pipeline] }
  47. [Pipeline] // container
  48. [Pipeline] }
  49. [Pipeline] // node
  50. [Pipeline] }
  51. [Pipeline] // podTemplate
  52. [Pipeline] End of Pipeline
  53. Finished: SUCCESS

虽然运行成功了,但目前kubectl使用的账号权限只能用于查询,如果项目进行部署是不行的,所以要创建新的账号供Jenkins使用,权限在某个命名空间内可以管理Pod资源即可。

在Master上执行:

  1. # 进入集群CA证书所在目录
  2. cd /etc/kubernetes/pki
  3. # 执行创建证书命令
  4. (umask 077;openssl genrsa -out jenkins.key 2048)
  5. # O=组织信息,CN=用户名
  6. openssl req -new -key jenkins.key -out jenkins.csr -subj "/O=kubernetes/CN=jenkins"
  7. # 签署证书
  8. openssl x509 -req -in jenkins.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out jenkins.crt -days 3650

将jenkins.crt和jenkins.key两个文件复制到所有Node节点上的/etc/kubernetes/pki目录内:

  1. # jenkins.crt
  2. cat jenkins.crt
  3. -----BEGIN CERTIFICATE-----
  4. MIICuDCCAaACCQD6pvA8Ecor7zANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwpr
  5. dWJlcm5ldGVzMB4XDTIwMDUyOTE2MDE0OFoXDTMwMDUyNzE2MDE0OFowJzETMBEG
  6. A1UECgwKa3ViZXJuZXRlczEQMA4GA1UEAwwHamVua2luczCCASIwDQYJKoZIhvcN
  7. AQEBBQADggEPADCCAQoCggEBALQS8ft94y2inZF7rWgc3xfkUP+4RUgab4FGBE7r
  8. iQ5eSqQ5Hxwgx0mbYqh12xs/IhGp4YY/NUqU5hXchQ7urEKdefmQjD3CcPPWgIsJ
  9. 8MA1uAdc6wG4d9eo0qcUcisPk6giPmXOtqw4EukH0VZLTPrRp/zle5SQHUSpSyuP
  10. CciuFSoWnm6xMo2fvTeH3WWM7MCFyCn7+OJkIaWlFWmp/qUGtsYI8lq2D4BVk0lf
  11. jw51KmYznj1izKxyEm8Kn/qpJ+myFHdc0GdxjLUCpFXpeHLxCEFAhJBnpUtuOA4O
  12. 2uBIDxp2j7f4BnLzQvPifnMPb5o6WF7Q/2fYOKcMvC1MWtECAwEAATANBgkqhkiG
  13. 9w0BAQsFAAOCAQEAaLpkGaFhpjLe6zO4vvDJXvGWhaY0XZKv8HrFQq6+Vqv+yf7f
  14. LCMwDaO2sLPZNVY8ruSYgbbG+Qbj8KNsDwKrMyf++fmxcpyo9XXkfnsh209hbL9C
  15. oMImnRRiw5bVX5nto2EEgpjPoI1EW79dfMUN8+KLj4IKe910vJ1rK3PsaNmh7T7m
  16. 3bVrfZFwz8yamHn629gxxvxZZfoN4f0kc2PqGSFsLxwYuRGGueZjNK9z5ixis/S3
  17. yEaGnjXBPZuoTC78X+avJhxBKLczVNLIiet+HWAcUsic9Ot49QfYZj4ovIrR+Uqg
  18. HJeI+VavIrgYd9T42XeWGBKTnEhfcniKwEZxog==
  19. -----END CERTIFICATE-----
  20. # jenkins.key
  21. cat jenkins.key
  22. -----BEGIN RSA PRIVATE KEY-----
  23. MIIEowIBAAKCAQEAtBLx+33jLaKdkXutaBzfF+RQ/7hFSBpvgUYETuuJDl5KpDkf
  24. HCDHSZtiqHXbGz8iEanhhj81SpTmFdyFDu6sQp15+ZCMPcJw89aAiwnwwDW4B1zr
  25. Abh316jSpxRyKw+TqCI+Zc62rDgS6QfRVktM+tGn/OV7lJAdRKlLK48JyK4VKhae
  26. brEyjZ+9N4fdZYzswIXIKfv44mQhpaUVaan+pQa2xgjyWrYPgFWTSV+PDnUqZjOe
  27. PWLMrHISbwqf+qkn6bIUd1zQZ3GMtQKkVel4cvEIQUCEkGelS244Dg7a4EgPGnaP
  28. t/gGcvNC8+J+cw9vmjpYXtD/Z9g4pwy8LUxa0QIDAQABAoIBAHajjL4u4H/uhXWW
  29. UFcpvmoVSLBSDYNFt3UqVihQ0gmfYfn0kGSNy/7Y2xU2INdArweIL0etWUT7+OMq
  30. WJfP87on2nbsHxmJg7WC+0mfkPhx6/8d3s9RY9O4LKFbvSRVrOi3NvkISh4JC5xw
  31. RCFglyUhAFaEMvlcQYw9JYNbSAzoWRLAdDIZJ5bOsedOtcJkpxQczr3ngYvJ2nXC
  32. 0sLCY6/Je9BDl01K4IHXIpKVrEmhJNj+KV9L8Umrkwr87RGr4jb25aHURW2abRY4
  33. 16qU8YUrdTG8eQqT/xMZtea1QcERyRr3y29FK8pO1ID+tyoNc/KEG3oEGbJPKzHj
  34. WB9CxukCgYEA5RLulHqyEAb2vEwaIRnbA5KPqDS0nfbe5L87FYO3J6KcJBokMlBm
  35. aNqlCiTThu5H4SOMaYJO4u9yxMPGYDNbPKdwt27trgqYoCso1tWcDv3DQsgi/M0q
  36. vip/ciH37vK3f+AlaQeSrtJi4TH7xTJYwgsN3X9TuToq958+F5qqTe8CgYEAyT2O
  37. GBinOOn349IDeHxYbzFgjmLtW2YEGp8FnpU/sziluPNCA9muTUUiBm9VUHN7YSEm
  38. DDQmohhee4IeseIrMBnHGuKkwpBDl+235tVCtCNXeTIx/hAGALw1BnNMVrHKspt2
  39. nqMch0+VMPypZ9HyA81I+Xqd5Zr3QA1IR/J8oz8CgYBjzIO0nF/HK8GC94TKtwD7
  40. 5XZAyfWGfG9PKSEMln3M/sMX12u9n9l+BQOyD6k4N8eJBnu928+Sfs95efGLJ9Sv
  41. 8CLjR6i1Eli8LxFzx0xeG6BeD+NuT9Q3VTyA9NuXdpcLVxP1Vh9Jms8JXUVa/Dw/
  42. DaHUxgwrvnPJvc7HadKYcQKBgCYR3QW19DySFnEk079BVsGCR8/n6xs1S2V12+xK
  43. M8jF2KQKcNylm5HGmE87VJppnlebm8UHQJ+9mHIpBYGFVcI9virZ4W1lOUROllG2
  44. 2m2VmgC1fDuh8GDHOgjEWxazf7MWMfSEyurWJVUlFy8qymvps/puNdyv2kJlwNzL
  45. hMSlAoGBAI/OWcteFYjPsYQM6d6FL9HMeuksN75nVqaZYOA59e+BUnt0e9r7D4cG
  46. 4wupqWA66IHo89t/JkkZ7Utxw/MO7kuyXy1tnxO6/Of1p6XWn3ckPQkGMADXfP/u
  47. 1osgYu8jLmVDMJ4nTTAZ3i/O6T3pqnl3TDbIgL9FRLxyggp5ZwRN
  48. -----END RSA PRIVATE KEY-----

复制文件完成后在所有Node节点上执行:

  1. # 创建jenkins用户信息
  2. kubectl config set-credentials jenkins --client-certificate=jenkins.crt --client-key=jenkins.key --embed-certs=true
  3. # 设置上下文信息,jenkins用户与集群建立关系
  4. kubectl config set-context jenkins@default-cluster --cluster=default-cluster --user=jenkins
  5. # 查看结果
  6. kubectl config view
  1. apiVersion: v1
  2. clusters:
  3. - cluster:
  4. certificate-authority-data: DATA+OMITTED
  5. server: https://192.168.122.3:6443
  6. name: default-cluster
  7. contexts:
  8. - context:
  9. cluster: default-cluster
  10. namespace: default
  11. user: default-auth
  12. name: default-context
  13. - context:
  14. cluster: default-cluster
  15. user: jenkins
  16. name: jenkins@default-cluster
  17. current-context: default-context
  18. kind: Config
  19. preferences: {}
  20. users:
  21. - name: default-auth
  22. user:
  23. client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
  24. client-key: /var/lib/kubelet/pki/kubelet-client-current.pem
  25. - name: jenkins
  26. user:
  27. client-certificate-data: REDACTED
  28. client-key-data: REDACTED

切换刚创建的上下文(切换用户)

  1. # 切换用户
  2. kubectl config use-context jenkins@default-cluster
  3. # 测试
  4. kubectl get pod
  5. # 没有权限
  6. Error from server (Forbidden): pods is forbidden: User "jenkins" cannot list resource "pods" in API group "" in the namespace "default"

目前新账号没有分配权限无法使用,创建dev-test命名空间,并创建管理该命名空间下pod资源的角色,然后绑定到jenkins账户:

  1. # 创建yaml内容但不执行,查看资源yaml可以加--dry-run -o yaml参数
  2. kubectl create namespace dev-test

创建角色:

  1. kind: Role
  2. apiVersion: rbac.authorization.k8s.io/v1beta1
  3. metadata:
  4. name: jenkins-role
  5. rules:
  6. - apiGroups: [""]
  7. resources: ["pods"]
  8. verbs: ["create","delete","get","list","patch","update","watch"]
  9. - apiGroups: [""]
  10. resources: ["pods/exec"]
  11. verbs: ["create","delete","get","list","patch","update","watch"]
  12. - apiGroups: [""]
  13. resources: ["pods/log"]
  14. verbs: ["get","list","watch"]
  15. - apiGroups: [""]
  16. resources: ["events"]
  17. verbs: ["watch"]
  18. - apiGroups: [""]
  19. resources: ["secrets"]
  20. verbs: ["get"]
  1. # 创建
  2. kubectl apply -f jenkins-role.yaml -n dev-test

绑定账号与角色:

  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: RoleBinding
  3. metadata:
  4. name: jenkins-role-bind
  5. roleRef:
  6. apiGroup: rbac.authorization.k8s.io
  7. kind: Role
  8. name: jenkins-role
  9. subjects:
  10. - apiGroup: rbac.authorization.k8s.io
  11. kind: User
  12. name: jenkins
  1. # 创建
  2. kubectl apply -f jenkins-role-bind.yaml -n dev-test

注意:Role和RoleBinding的命名空间都是dev-test权限才生效,否则是不会生效的,账号jenkins此时拥有对dev-test命名空间pod的管理权限。

测试权限:

  1. # 在Node节点执行
  2. [root@centos7-k8s-node1 ~]# kubectl apply -f ndsutils.yaml -n dev-test
  3. pod/dnsutils created
  4. [root@centos7-k8s-node1 ~]# kubectl get pod -n dev-test
  5. NAME READY STATUS RESTARTS AGE
  6. dnsutils 1/1 Running 0 11s
  7. [root@centos7-k8s-node1 ~]# kubectl get pod -n default
  8. Error from server (Forbidden): pods is forbidden: User "jenkins" cannot list resource "pods" in API group "" in the namespace "default"

在PodTemplate中增加Host Path Volume:/root/yaml,里面放入一个pod资源的yaml文件

修改构建脚本:

  1. podTemplate (inheritFrom: "jenkins-slave-temp"){
  2. node(POD_LABEL) {
  3. container('jnlp'){
  4. stage('Run shell') {
  5. sh 'echo hello world'
  6. }
  7. }
  8. container('jnlp-docker'){
  9. stage("Run docker"){
  10. sh 'kubectl config use-context jenkins@default-cluster'
  11. sh 'kubectl delete -f /root/yaml/ndsutils.yaml -n dev-test'
  12. sh 'kubectl get pod -n dev-test'
  13. sh 'kubectl apply -f /root/yaml/ndsutils.yaml -n dev-test'
  14. sh 'kubectl get pod -n dev-test'
  15. }
  16. }
  17. }
  18. }

构建运行结果:

  1. Running on jenkins-test-13-lpcwk-fjw2j-4rzxf in /home/jenkins/agent/workspace/Jenkins-Test
  2. [Pipeline] {
  3. [Pipeline] container
  4. [Pipeline] {
  5. [Pipeline] stage
  6. [Pipeline] { (Run shell)
  7. [Pipeline] sh
  8. + echo hello world
  9. hello world
  10. [Pipeline] }
  11. [Pipeline] // stage
  12. [Pipeline] }
  13. [Pipeline] // container
  14. [Pipeline] container
  15. [Pipeline] {
  16. [Pipeline] stage
  17. [Pipeline] { (Run docker)
  18. [Pipeline] sh
  19. + kubectl config use-context jenkins@default-cluster
  20. Switched to context "jenkins@default-cluster".
  21. [Pipeline] sh
  22. + kubectl delete -f /root/yaml/ndsutils.yaml -n dev-test
  23. pod "dnsutils" deleted
  24. [Pipeline] sh
  25. + kubectl get pod -n dev-test
  26. No resources found in dev-test namespace.
  27. [Pipeline] sh
  28. + kubectl apply -f /root/yaml/ndsutils.yaml -n dev-test
  29. pod/dnsutils created
  30. [Pipeline] sh
  31. + kubectl get pod -n dev-test
  32. NAME READY STATUS RESTARTS AGE
  33. dnsutils 0/1 ContainerCreating 0 1s
  34. [Pipeline] }
  35. [Pipeline] // stage
  36. [Pipeline] }
  37. [Pipeline] // container
  38. [Pipeline] }
  39. [Pipeline] // node
  40. [Pipeline] }
  41. [Pipeline] // podTemplate
  42. [Pipeline] End of Pipeline
  43. Finished: SUCCESS

创建集群角色,此集群角色只有查看Pod的权限:

  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: ClusterRole
  3. metadata:
  4. name: cluster-reader
  5. rules:
  6. - apiGroups: [""]
  7. resources: ["pods"]
  8. verbs: ["get","list","watch"]

绑定账号和集群角色:

  1. apiVersion: rbac.authorization.k8s.io/v1beta1
  2. kind: ClusterRoleBinding
  3. metadata:
  4. name: cluster-reader-jenkins
  5. roleRef:
  6. apiGroup: rbac.authorization.k8s.io
  7. kind: ClusterRole
  8. name: cluster-reader
  9. subjects:
  10. - apiGroup: rbac.authorization.k8s.io
  11. kind: User
  12. name: jenkins

集群角色没有命名空间的概念,集群角色是在所有命名空间有效。

  1. # 创建
  2. kubectl apply -f cluster-reader.yaml
  3. # 绑定
  4. kubectl apply -f cluster-reader-jenkins.yaml

在Node节点上执行:

  1. [root@centos7-k8s-node1 yaml]# kubectl get pod -A
  2. NAMESPACE NAME READY STATUS RESTARTS AGE
  3. dev-test dnsutils 1/1 Running 0 7m17s
  4. kube-system coredns-7ff77c879f-ck49p 1/1 Running 9 5d3h
  5. kube-system coredns-7ff77c879f-d2xfc 1/1 Running 10 5d3h
  6. kube-system etcd-centos7-k8s-master 1/1 Running 11 5d3h
  7. kube-system kube-apiserver-centos7-k8s-master 1/1 Running 6 4d1h
  8. kube-system kube-controller-manager-centos7-k8s-master 1/1 Running 12 5d3h
  9. kube-system kube-flannel-ds-amd64-52vcn 1/1 Running 9 5d3h
  10. kube-system kube-flannel-ds-amd64-vtw58 1/1 Running 12 5d3h
  11. kube-system kube-flannel-ds-amd64-xm8d5 1/1 Running 10 5d3h
  12. kube-system kube-proxy-l8875 1/1 Running 18 5d3h
  13. kube-system kube-proxy-p5fdr 1/1 Running 9 5d3h
  14. kube-system kube-proxy-pdvz2 1/1 Running 16 5d3h
  15. kube-system kube-scheduler-centos7-k8s-master 1/1 Running 10 5d3h
  16. kube-system metrics-server-7f6d95d688-vjsbj 1/1 Running 7 4d1h
  17. kubernetes-dashboard dashboard-metrics-scraper-6b4884c9d5-8hblg 1/1 Running 7 4d1h
  18. kubernetes-dashboard kubernetes-dashboard-7b544877d5-tz4xj 1/1 Running 7 4d1h
  19. nginx-ingress coffee-5f56ff9788-2745d 1/1 Running 6 4d1h
  20. nginx-ingress coffee-5f56ff9788-c8jlx 1/1 Running 6 4d1h
  21. nginx-ingress nginx-ingress-hjqzc 1/1 Running 6 4d1h
  22. nginx-ingress nginx-ingress-jfh6h 1/1 Running 6 4d1h
  23. nginx-ingress tea-69c99ff568-cpp2k 1/1 Running 6 4d1h
  24. nginx-ingress tea-69c99ff568-rmnr2 1/1 Running 6 4d1h

版权声明:本文为bluersw原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/bluersw/p/12990771.html