Jenkins-Slave分布式架构搭建

news2025/1/11 12:53:45

♥ Jenkins的分布式构建,在Jenkins的配置中叫做节点,分布式构建能够让同一套代码或项目在不同的环境(如:Windows和Linux系统)中编译、部署等。
♥ 将jenkins项目发布在不同服务器上(分布jenkins工作空间,部署项目到不同服务器)这就形成了jenkins的分布式。节点服务器不需要安装jenkins,只需要运行一个slave节点服务,构建事件的分发由master端(jenkins主服务)来执行。

在这里插入图片描述

 

一、缘起

CICD的思想目前对于每一个正规的软件开发团队基本都是必填项,那么一般来讲Jenkins的应用自然沦为了刚需。

Jenkins目前在单台Vm虚机上基于docker容器化部署,当Jenkins用了一段时间以后,发现每天的Jenkins 构建次数日益剧增,逐渐出现了Jenkins访问速度慢,卡顿,甚至直接终止服务响应的情况。由于底层是基于Vm,那么申请了一些物理资源,暂时解决了问题。

随后,随着几个项目组的构建需求频繁增长,每天Jenkins的构建次数会超过500次,此时显然原有部署结构已经不够支撑了。Jenkins服务各种卡死,无响应白屏频频发生。不过出现这个问题,也是意料之内,但是就是相对棘手了些。

由于现有服务器资源相对有限,直接开几台高配置Vm,可能会比较简单粗暴的解决问题,但成本相对较大,也不利于资源利用。因为Jenkins工作日时间也分忙时闲时。


二、解决思路

1. 痛点梳理

    构建任务高峰期,Jenkins服务频发不可用状态
    服务虚机资源有限,不能随意调用空闲资源
    Jenkins 服务器宕机后需要人工手动重启
 

Jenkins通过kubernetes plugin连接K8s集群

一、Jenkins安装kubernetes plugin插件

1.1 点击左侧系统管理

1.2 点击插件管理

1.3 安装插件Kubernetes plugin

1.4 安装好后重启Jenkins

浏览器输入http://10.0.0.151:8080/restart,页面点击“是”重启Jenkins

 

二、进入配置页

2.1 左侧点击系统管理

2.2 点击节点管理 

 

 2.3 点击Configure Clouds

三、配置

3.1 下拉框选择Kubernetes

 

3.2 点击Kubernetes Cloud details…进入配置详情页

 

3.3 填入认证信息

需要填写红框内的4个内容

 

Kubernetes 地址

 在集群里使用命令查看

https://10.0.0.151:6443就是地址
[root@k8s151 ~]$ kubectl cluster-info
Kubernetes control plane is running at https://10.0.0.151:6443
KubeDNS is running at https://10.0.0.151:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Kubernetes 服务证书 key

为/root/.kube/config中的certificate-authority-data部分,并通过base64加密

终端输入下面的命令查看certificate-authority-data:

[root@k8s151 ~]$ cat .kube/config
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1ERXhNakExTVRJd00xb1hEVE16TURFd09UQTFNVEl3TTFvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTWtWClk5ZkxhWlpJYXdIOEpDUDVvdndHZU5uOHpaRUluZHhONjBnUVF5QXlSNXFHVkt2NTdUek1IVlY5bWtFMEF4QWgKRHJQbEFBVXVDaWJqbm1UeHJNSTduWkIrNDlObVJ4RmQ3OVhpanZWRmFoSklIUnd0SG8vZFhmNTA0NFFwT3A1ZQpZRHR2alAvL1lubXo5dUY0eFBQS1BWTjBRWWFTLzVsMnpFVkQ5N2JjUWFGd2pCWDFvbXpUQng1SkxNVVlpalRECmVKR2ZmZ0labHVUM3JpbFpuazN2amhsblpRdkFtQUR0ajRFRDVrcTZEUXdvaGU0TWxvQit0azgvL0cyeXB0SEEKMjhwQThVT0FPQjRUQ3dUSlRpYmVhM3dERGNVeDdrZ1JaRHZsTGJBRkpmL2MzcGozOElXNVJxVGFaVFB0YkZMYgpKMGRrczJMMXlXdmlRUHZkQTlzQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZDZ3JOV25tWkpsVm5UMmI5aUtjRE13YlRXL05NQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFDbE1LNDVJS3hpZDIzdDFzbldCN0w3UDh3UG5RWThheTlLZGFVbldQdTVtcFBCbnBMVQpGdUx6MVE1YjdVY0ltdCswZGN1T3FXKzhFTUU3cU80ekd2WHp1WFk3blU3eG9OU1RBOWxlSGNrMFlWRnpra0UvCnI3WHViU05GZHBacW5PTUtOTlBtRHBoQUx0VzkwYkl1SkE0a1dXUVRmVE15V2ZIL2NtRWlDaFVpSGR3UmF4RVQKeVNOZ2J1Wm1BNGpYSm93TndNejAxQ3FRYWJqWnhIOFZxaFRoMGJOakJ1MXArQVArTzVYemNNcllMSjF0cnV2RgptMVQxN0JuQW50M2xrRmZST3doMXlyQ3E3QTZVVzZUSWwrNHZDb0haVW1lZFlVT1JVNGk3bGRMb3ZCMEFDT3dLCkU0VEdwalJnc21RL0hCVTBKcEFQekxud0N3d2x0L2ZZWitYOQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://10.0.0.151:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lJUEdFZ3Y5R3R5bGN3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpBeE1USXdOVEV5TUROYUZ3MHlOREF4TVRJd05URXlNRFJhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTZXVERMQWFVTnhQMmlwalkKS1ZvQTZwTUE4RDM5c1lQVU1FSHh5Mkp5QTRqQVBkUkRjNmJLZ3NibTlHMEdWSER4aGNrTmV6SWQ5aFI4aFJabwp2STl2dGY5c3VvZmJSUUphcDNTMjNrdmNlUHdlb25YSjhtYkc3VklrQUlqT0U2dW1EalZqaHJVOGgwaTJ2emlVCjhESFc2QnhPbWVXUGFxZ1pBUC81TkU1cEQwM3QzTTlpb2pCMU9mVzNLM056WGtrdzZWcFhRNkMwclR3MnNtMnIKelg3V1B2ZTdQV1V6Qi9GeFR2T21yVDNLSkZMTEo4OHQ2OFJ6VXZHV3lZaXdxalVudUpvV2VTLzRGRTJEVkhyOQpwSUJ4b2lKQzdTMHRqSmVqMGpUQVBYRGhDNmtwU2tWZk8yNEVIeFAzZkx2WndhK1FROUlPNFhQM21DUHNTTzl4CmNIeVBPd0lEQVFBQm8wZ3dSakFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0h3WURWUjBqQkJnd0ZvQVVLQ3MxYWVaa21WV2RQWnYySXB3TXpCdE5iODB3RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFMZk92UTA1YmJjYW5lS2dkWnV4TlVDcEdITnJVWCs4SkFrZ09rbW5FVGFuVTNLTGJnMUNrU0NECkxORFd0TWQ3c2tqb1dsUGprZ0dxekdKdStqbDZ5UmhwR0k4RVAveTlIcGdsRGZ4MjZWc01WcDFDa2J3Z2RnRGcKUVZDaFVoSXgrRnRKVnlQY3UraUsrSHdiclR0MVZjRUtaME52YmhYRGRoTTMyRmgvKzcrQWFmK3FNZ1JNVWRsYgpjY25VNklDRzQ0VGpQUks1dk5TQ204ek5kYU1kRFR0UkQwVHp3ZkpXMnZhb1kxb1FWd0dmN2FNdksxMGw5OFJTCnI2cmdNUGNoeXUrRGp6NU15Y1V0OVJEQTRIekdFVG1ySGpzUm5KVHpkV3NBU1FKTmRLREQ4RWIzYzV4ZVF0TEQKaHJTWGJRT0l3RmUrTGRJN3RqaTJuNFlyWkJnUzd3ND0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
    client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBNldURExBYVVOeFAyaXBqWUtWb0E2cE1BOEQzOXNZUFVNRUh4eTJKeUE0akFQZFJECmM2Yktnc2JtOUcwR1ZIRHhoY2tOZXpJZDloUjhoUlpvdkk5dnRmOXN1b2ZiUlFKYXAzUzIza3ZjZVB3ZW9uWEoKOG1iRzdWSWtBSWpPRTZ1bURqVmpoclU4aDBpMnZ6aVU4REhXNkJ4T21lV1BhcWdaQVAvNU5FNXBEMDN0M005aQpvakIxT2ZXM0szTnpYa2t3NlZwWFE2QzByVHcyc20ycnpYN1dQdmU3UFdVekIvRnhUdk9tclQzS0pGTExKODh0CjY4UnpVdkdXeVlpd3FqVW51Sm9XZVMvNEZFMkRWSHI5cElCeG9pSkM3UzB0akplajBqVEFQWERoQzZrcFNrVmYKTzI0RUh4UDNmTHZad2ErUVE5SU80WFAzbUNQc1NPOXhjSHlQT3dJREFRQUJBb0lCQUJQM3lmYnZUU2oxTFVlbwpVZjRmdENwZGoxditnY0Q1UFdNdmtTZE1jZUs1aFhFRXd3eVcvWVo0eS9PbmpENFhONkt4azlTeGNmekd2ZXlKCkFVYjRvcDhZamszYko3aGN2akxMZW9YRVNjV1VGRzdqMHZaSk1zWEZIRTFyWnU0cDVsZ2EyendBTDRDSGlSTU4KSFRqN21wNWJKYUpuRUlFWWhxTWVRMHpsVkhtNWtFWW80TFZQUnR3NUJoOU1OU3VJYkF6elkvZEgrSTViNWFZSApnbjlsR3FoQmR4eUN5YXUzVDhoc2t4TDROU2F6VjdCSWV4R0ZhcFdsSzhrYVhnOEg2cCtlcUZ5S2M0YUxLdzl5CjRlbWdaYndWWElRVUxweHVtblJJdThCdUY1b0swUnI4UUZLUGl0QmE2QUd2T2VzZzE3b0l4Q1dmOWttcUZqSVIKZTBtTkg3a0NnWUVBOEQ5eTFYekQ0T3QwWUVPbzdKVkd4SVZPdkZBK3ZBWVdUUjlpcFl2bVJ6OUtMbFdSdmJZLwpmOHdxTzJEZ2FSWng5NXcvSzYvY1l6bXUzQzZiS0hESmVKUit1aEg5TDNrM1ZpR3FFMndNKzBxWkE2RjJwK1c0CnlFcGFRekRoUDFwczRXM2hMN3cwVGRuanNHaDlBVE05VmlBZUE2QmtqT21PTmI0WkNrOG9ra2NDZ1lFQStMSkQKL21uR0Qwak5xWjhpcTFLamtSVUp5R1VHd1hBenA2WVRMRXNFL2ZtWmxObmNDSllYSklXbG1lTzBuK0g2cG90VApscEwva2s5cjJLNUhqNDZTamVETG1VRlB1aTJwQnpxcjlqU0NwazVEYVBYdjFnYXgrMUF3VW9qa2pYWEZTcEJQClpiOFBka04zWlNQbE1Yc0IwMTdsOEdQTTVlMkhiY0gxNDkwOEFXMENnWUJUWjdPV0tocFdtMmRyaEJIQkVKSGcKNStiTnVZNE4rSThGZHovbitRbVk4bi91VmdhaXRnS1ZlMnV0OFpQMjU3UHBJblZMMVdITmtOa0QxNnBGLytIeAoycHVrUFZxSWdLeVZXbHFSSTVIZUs2ZXpldnFXajBuM1B0alhPc0Q0SFl4dk5wWlczQi9NWnppRXBjSEFDT25pClhJUU8vai9xSzZzVFBVdTBLSWNOUVFLQmdHK29HYjd2M215ZVV6Z0VxcHdnemk4bE11ODE3SUtNemFSSGUvUTIKK2xiTTZaZGErTjhpQStIeDN4Zm9rLy8waFlTZ3FUYkJhTjFYcXlQdG0xTm92NFBUbVpXRkxUWjVxWm9GVFkrTQpvOXZtNTMwSWJsVzVTODk1Z1RpTkhaQWxnQjZxQy91eWZFNnNtNzVkRDFuWDBFb0dJVlo4ZUZJREF2clVTb0d6Cm9tMUJBb0dBSXZ4UzdTVU9BcXI3MFFIMEE1eFpHcHdjbFk1ZzJVMTdTK1ZRTXJjTlEzL01BdDBqUDBhcmFUUXUKNGF0KzBjZ1RNakRydDJTUEo3TC9GQy9mZTVaM0pOYlJTUGpNTW5ZZEtTUFJwcVVOV3JYZVJGenN0cXM2UVZLYgpKZHB6a3g2ZWk3Z0Z3eGtMVUhUVjBRdzBjN21iUlBLYlduakU3T1FjSEJuNnVsUTlLZWs9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==

 

在执行下面的命令进行base64加密:

echo "certificate-authority-data冒号后面的内容" | base64 -d
 

[root@k8s151 ~]$ echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1ERXhNakExTVRJd00xb1hEVE16TURFd09UQTFNVEl3TTFvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTWtWClk5ZkxhWlpJYXdIOEpDUDVvdndHZU5uOHpaRUluZHhONjBnUVF5QXlSNXFHVkt2NTdUek1IVlY5bWtFMEF4QWgKRHJQbEFBVXVDaWJqbm1UeHJNSTduWkIrNDlObVJ4RmQ3OVhpanZWRmFoSklIUnd0SG8vZFhmNTA0NFFwT3A1ZQpZRHR2alAvL1lubXo5dUY0eFBQS1BWTjBRWWFTLzVsMnpFVkQ5N2JjUWFGd2pCWDFvbXpUQng1SkxNVVlpalRECmVKR2ZmZ0labHVUM3JpbFpuazN2amhsblpRdkFtQUR0ajRFRDVrcTZEUXdvaGU0TWxvQit0azgvL0cyeXB0SEEKMjhwQThVT0FPQjRUQ3dUSlRpYmVhM3dERGNVeDdrZ1JaRHZsTGJBRkpmL2MzcGozOElXNVJxVGFaVFB0YkZMYgpKMGRrczJMMXlXdmlRUHZkQTlzQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZDZ3JOV25tWkpsVm5UMmI5aUtjRE13YlRXL05NQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFDbE1LNDVJS3hpZDIzdDFzbldCN0w3UDh3UG5RWThheTlLZGFVbldQdTVtcFBCbnBMVQpGdUx6MVE1YjdVY0ltdCswZGN1T3FXKzhFTUU3cU80ekd2WHp1WFk3blU3eG9OU1RBOWxlSGNrMFlWRnpra0UvCnI3WHViU05GZHBacW5PTUtOTlBtRHBoQUx0VzkwYkl1SkE0a1dXUVRmVE15V2ZIL2NtRWlDaFVpSGR3UmF4RVQKeVNOZ2J1Wm1BNGpYSm93TndNejAxQ3FRYWJqWnhIOFZxaFRoMGJOakJ1MXArQVArTzVYemNNcllMSjF0cnV2RgptMVQxN0JuQW50M2xrRmZST3doMXlyQ3E3QTZVVzZUSWwrNHZDb0haVW1lZFlVT1JVNGk3bGRMb3ZCMEFDT3dLCkU0VEdwalJnc21RL0hCVTBKcEFQekxud0N3d2x0L2ZZWitYOQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" | base64 -d
-----BEGIN CERTIFICATE-----
MIIC5zCCAc+gAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
cm5ldGVzMB4XDTIzMDExMjA1MTIwM1oXDTMzMDEwOTA1MTIwM1owFTETMBEGA1UE
AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMkV
Y9fLaZZIawH8JCP5ovwGeNn8zZEIndxN60gQQyAyR5qGVKv57TzMHVV9mkE0AxAh
DrPlAAUuCibjnmTxrMI7nZB+49NmRxFd79XijvVFahJIHRwtHo/dXf5044QpOp5e
YDtvjP//Ynmz9uF4xPPKPVN0QYaS/5l2zEVD97bcQaFwjBX1omzTBx5JLMUYijTD
eJGffgIZluT3rilZnk3vjhlnZQvAmADtj4ED5kq6DQwohe4MloB+tk8//G2yptHA
28pA8UOAOB4TCwTJTibea3wDDcUx7kgRZDvlLbAFJf/c3pj38IW5RqTaZTPtbFLb
J0dks2L1yWviQPvdA9sCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB
/wQFMAMBAf8wHQYDVR0OBBYEFCgrNWnmZJlVnT2b9iKcDMwbTW/NMA0GCSqGSIb3
DQEBCwUAA4IBAQClMK45IKxid23t1snWB7L7P8wPnQY8ay9KdaUnWPu5mpPBnpLU
FuLz1Q5b7UcImt+0dcuOqW+8EME7qO4zGvXzuXY7nU7xoNSTA9leHck0YVFzkkE/
r7XubSNFdpZqnOMKNNPmDphALtW90bIuJA4kWWQTfTMyWfH/cmEiChUiHdwRaxET
ySNgbuZmA4jXJowNwMz01CqQabjZxH8VqhTh0bNjBu1p+AP+O5XzcMrYLJ1truvF
m1T17BnAnt3lkFfROwh1yrCq7A6UW6TIl+4vCoHZUmedYUORU4i7ldLovB0ACOwK
E4TGpjRgsmQ/HBU0JpAPzLnwCwwlt/fYZ+X9
-----END CERTIFICATE-----

 

Kubernetes 命名空间

使用default默认就好

凭据

这地方需要添加一个凭借

在弹出的页面中类型选Secret text

 

下面的Secret通过终端添加:

  • 创建一个
[root@k8s151 ~]$ kubectl create sa jenkins
serviceaccount/jenkins created
  • 获取token名
[root@k8s151 ~]$ kubectl describe sa jenkins
Name:                jenkins
Namespace:           default
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   jenkins-token-j5gd6   #这个就是token名
Tokens:              jenkins-token-j5gd6
Events:              <none>

获取token值

[root@k8s151 ~]$ kubectl describe secrets jenkins-token-j5gd6 -n default
Name:         jenkins-token-j5gd6
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: jenkins
              kubernetes.io/service-account.uid: 1363df30-acbc-4664-ab2f-4a311622c306

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1066 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IkFMcWtERjZsZzE2aXZZWWxkX3NrX2tzQllOejVkd2xEV2ZrM1lhRmliOVUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImplbmtpbnMtdG9rZW4tajVnZDYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiamVua2lucyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjEzNjNkZjMwLWFjYmMtNDY2NC1hYjJmLTRhMzExNjIyYzMwNiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmplbmtpbnMifQ.M1k9MkA0iiy9LtFIueMQB3ZQmZYI0uYLGgHcM7jNIZTpgl6d53XohQtyCX3IURJlRL8sDleSsJYcBDMaStq4NsGIoEXF5NZDXd77aFDsfSozr4KpBtAZ49qKhFD1ebe-lXp80AlUw6puO6u7WkEoJAH34gVlMqOTujbCC52NVma_wp_Qrm682LKBYr8vFsp-Z4IB4IAK1UP2X17oCojAEGJpjBAH1yhZLGnbCGGN_39h5fcfIx77VpfWKz_3MrzSuIfYZmcrI51d1io82dRdzSunEWw2KKtbtvGVNJsM7EXxOB_zTRaHRRjJf79lJ3c_RPY5IroWQSYspS63RJeu2g

上图中的token即为Secret填入的内容

最后的描述可以随意填写

点击添加,凭据就好了

 

四、使用rbac授权

Jenkins通过kubernetes-plugin对k8s进行操作,需要在k8s内提前进行rbac授权。为方便管理,我们为其绑定cluster-admin角色。当然也可以进一步缩小使用权限。

k8s内置了很多集群角色

k8s 内置cluster role(集群角色) cluster-admin、admin、 edit、 view的作用范围及区别_学亮编程手记的博客-CSDN博客

#创建serviceaccounts
kubectl create sa jenkins   #给k8s创建一个jenkins用户
#对jenkins用户绑定cluster-admin角色(cluster-admin相当于内置的root用户)
kubectl create clusterrolebinding jenkins --clusterrole=cluster-admin --serviceaccount=default:jenkins



我们也可以创建一个角色,因为cluster-admin的角色权限比较高
创建一个service-reader角色

cat >service-reader.yaml<<'EOF
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: service-reader
rules:
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "watch", "list"]
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get","list","patch","watch"]
EOF

kubectl apply -f service-reader.yaml

#对jenkins用户绑定service-reader角色(cluster-admin相当于内置的root用户)
kubectl create clusterrolebinding jenkins --clusterrole=service-reader --serviceaccount=default:jenkins

五、验证

点击连接测试,左侧显示k8s集群版本

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java 简单了解spring之(IOC容器)

IOC 容器 是spring的一个重要组成部分 IOC 翻译过来叫控制反转 他在做的事是 降低计算机代码的耦合度 这个过程叫IOC 通过控制反转 对象在被创建时 由一个调控系统内所有对象的外界实体将将其所依赖的对象引用传递给他&#xff0c;也可以说&#xff0c;依赖被注入到对象中 说简…

[oeasy]python0048_取整_int_float_浮点型_cast_扮演_tab_制表键_制表符

转化为10进制 回忆上次内容 上次 把其他进制 转化回 十进制 用的是 int 函数 int 来自于 integer 同源词 还有 integrateentire意思都是完整的 完整的 和 零散的 相对 可以把 零散的小数 转化为 完整的整数吗&#xff1f;&#x1f914; 取整 可以 把一个浮点型的小数 取…

【Proteus仿真】【51单片机】酒精浓度检测系统设计

文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用LCD1602显示模块、按键模块、LED和蜂鸣器、MQ-3酒精传感器模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示酒精浓度值和阈值&…

【自学Docker】Docker命令

Docker命令 Docker命令分类 Docker环境信息 docker [info|version]Docker容器生命周期管理 docker [create|exec|run|start|stop|restart|kill|rm|pause|unpause]Docker容器操作运维 docker [ps|inspect|top|attach|wait|export|port|rename|stats]Docker容器rootfs命令 …

AMBA--AHB总线协议学习及Verilog实现与仿真(一)

1、AHB总线概述 AHB&#xff1a;Advanced High-performance Bus,即高级高性能总线。AHB总线是SOC芯片中应用最为广泛的片上总线。下图是一个典型的基于AMBA AHB总线的微控制器系统&#xff1a; 基于AMBA AHB的设计中可以包含一个或多个总线主机&#xff0c;通常一个系统里至少…

MySQL——如何正确的显示随机消息

在之前的文章中有介绍order by语句的几种执行模式。考虑如下场景&#xff1a;有一个APP&#xff0c;有一个随机显示英语单词的功能&#xff0c;也就是根据每个用户的级别有一个单词表&#xff0c;然后这个用户每次访问首页的时候&#xff0c;都会随机滚动显示三个单词。会发现随…

PhotoZoom2023专业的图片无损放大软件最新V8版功能介绍

PhotoZoom 8 全新版本 震撼来袭。 一款划时代的、技术上产生革命性影响的数码图片放大工具。 我们获取图片的方法&#xff0c;一般是从度娘图片和各个图库里找素材。但一般网上搜索到的很多图片像素都非常小&#xff0c;普通方法放大就像打了马赛克一样&#xff0c;根本没法直接…

基于STM32的室内环境监测系统、基于STM32的智能家居系统

程序源码无删减 整个开发用到的所有资料如下&#xff1a; 开发软件MDK JLINK驱动安装包及相关文件 stm32开发资料-stm32f103c8t6 PCtoLCD2002 取模软件 stm32配套的液晶屏资料以及相关程序 Stm32f103c8t6 UCOSII 各传感器的数据手册以及程序、BMP180、DHT11温度模块、HC-SR04 …

EthernetOnTCP--基于Qt QSslSocket 套接字在PCAP 集线器上实现以太网隧道

在上一篇文章中&#xff0c;我们使用PCAP建立了本地的软件集线器&#xff08;Hub&#xff09;。考虑到较远距离的跨车间调试&#xff0c;有必要使用Tcp连接构造一个以太网的隧道&#xff0c;使得两个车间之间的调试设备可以虚拟的连接在一个Hub上。当然&#xff0c;我们可以使用…

【ROS】—— 机器人系统仿真 —Rviz中控制机器人模型运动与URDF集成Gazebo(十五)

文章目录前言1. Arbotix使用流程1.1 安装 Arbotix1.2 创建新功能包&#xff0c;准备机器人 urdf、xacro 文件1.3 添加 Arbotix 配置文件1.4 编写 launch 文件配置 Arbotix1.5 启动 launch 文件并控制机器人模型运动2. URDF集成Gazebo2.1 URDF与Gazebo基本集成流程2.2 URDF集成G…

Spring Boot整合Redis(gradle + gson + lombok + redisTemplate)

本文创建了gradle项目&#xff0c;用来整合Spring Boot和Redis&#xff0c;用到了gradle gson lombok redisTemplate等技术。 重要文件&#xff1a; 文件名说明build.gradlegradle配置文件Redis2Application.java启动类Controller.java控制器类StudentService.java业务逻辑…

深入解析Linux虚拟化KVM-Qemu分析之virtio设备

说明&#xff1a; KVM版本&#xff1a;5.9.1QEMU版本&#xff1a;5.0.0工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 先来张图&#xff1a; 图中罗列了四个关键模块&#xff1a;Virtio Device、Virtio Driver、Virtqueue、Notification&#xff08;eventfd…

Linux——简单了解文件与目录结构

1、 Linux 文件 1.1 概述 Linux系统 一切皆文件。 从我们刚接触到Linux系统&#xff0c;就能听到这句话&#xff1a;Linux系统 一切皆文件。 我们来看看Linux文件系统和Windos的差异&#xff1a; Windows &#xff0c;我们知道一台新的电脑到手之后&#xff0c;往往都只有一…

Vue2的双向绑定真的就是观察者模式吗?

导语建议先看看往期的推文&#xff0c;对vue响应式有一定理解后再阅读本文。Vue的双向绑定&#xff08;数据劫持&#xff09;响应式与观察者模式&#xff08;特别是附录&#xff0c;观察者模式与发布订阅模式&#xff09;关于Vue2深入响应式原理&#xff0c;作者原话为&#xf…

搭建nacos环境(保姆级教程)

2.2.1 服务发现中心 根据上节讲解的网关的架构图&#xff0c;要使用网关首先搭建Nacos。 首先搭建Nacos服务发现中心。 在搭建Nacos服务发现中心之前需要搞清楚两个概念&#xff1a;namespace和group namespace&#xff1a;用于区分环境、比如&#xff1a;开发环境、测试环…

【Linux】进程间管道通信、线程池

目录 一、进程间通信的概念 二、匿名管道 2.1 什么是管道 2.2 管道的实现 2.3 管道的使用 三、进程池 3.1 进程池实现逻辑 3.2 模拟任务表 3.3 进程池的创建 四、命名管道 4.1 创建命名管道 4.2 命令管道的使用 一、进程间通信的概念 进程具有独立性&#xff0c;…

面试系列:单点登录的知识(一)

大家好&#xff0c;我是车辙&#xff0c;由于目前接手的业务涉及到了单点登录&#xff0c;所以一直在疯狂的去补充这方面的知识。也写下了这篇面试形式的文章&#xff0c;写的不好大家轻点 Diss。 面试开始 在焦急的等待中&#xff0c;一位看上去比较年轻的小伙子走了过来。我…

Leetcode:701. 二叉搜索树中的插入操作(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 递归&#xff1a; 原理思路&#xff1a; 迭代&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二…

Codeforces Round #843 (Div. 2)——A,B,C,E

​​​​​​​​​​​Dashboard - Codeforces Round #842 (Div. 2) - Codeforces A: 思维构造 题意&#xff1a;给定一个由 ab 组成的字符串&#xff0c;将该字符串拆分成 3 个部分&#xff08;a&#xff0c;b&#xff0c;c&#xff09;&#xff0c;要求中间部分的字典序最大…

2022 年终总结

在 12 月 31 号晚上这天&#xff0c;打开朋友圈大家都在告别 2022、迎接 2023&#xff0c;我却想不到任何值得发的内容。没有外出体会元旦的节日氛围&#xff0c;也没有观看任何跨年活动&#xff0c;2022 年最后一秒跟全年的 3153.6 万秒没有任何区别。 甚至这篇总结都差点没有…