这里是使用的ubuntu24.02系统版本,为什么会选择使用microk8s,因为这可能是最简单k8s,而且足够轻量化。

推荐至少3台机器,master node1 node2
使用下面的命令进行安装

sudo snap install microk8s --classic

如果后续使用过程中出现数据库损坏且无法修复则使用

sudo snap remove microk8s

彻底重装后再解决问题。
然后在master运行
 

microk8s add-node

选择带有 --work的命令在node中执行就行,每台都要装microk8s。可以根据个人需要选择不同的node加入方式。

接下来就是找到这个文件,先运行microk8s stop

vi /var/snap/microk8s/8511/args/kube-apiserver

然后下方authorization改为RBAC,Node,默认是allowalways.

--cert-dir=${SNAP_DATA}/certs
--service-cluster-ip-range=10.152.183.0/24
--authorization-mode=RBAC,Node
--service-account-key-file=${SNAP_DATA}/certs/serviceaccount.key
--client-ca-file=${SNAP_DATA}/certs/ca.crt
--tls-cert-file=${SNAP_DATA}/certs/server.crt
--tls-private-key-file=${SNAP_DATA}/certs/server.key
--tls-cipher-suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384
--kubelet-client-certificate=${SNAP_DATA}/certs/apiserver-kubelet-client.crt
--kubelet-client-key=${SNAP_DATA}/certs/apiserver-kubelet-client.key
--secure-port=16443
--etcd-servers="unix://${SNAP_DATA}/var/kubernetes/backend/kine.sock:12379"
--allow-privileged=true
--service-account-issuer='https://kubernetes.default.svc'
--service-account-signing-key-file=${SNAP_DATA}/certs/serviceaccount.key
--event-ttl=5m
--profiling=false

# Enable the aggregation layer
--requestheader-client-ca-file=${SNAP_DATA}/certs/front-proxy-ca.crt
--requestheader-allowed-names=front-proxy-client
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
--proxy-client-cert-file=${SNAP_DATA}/certs/front-proxy-client.crt
--proxy-client-key-file=${SNAP_DATA}/certs/front-proxy-client.key
#~Enable the aggregation layer
--enable-admission-plugins=EventRateLimit
--admission-control-config-file=${SNAP_DATA}/args/admission-control-config-file.yaml
--kubelet-certificate-authority=${SNAP_DATA}/certs/ca.crt
--kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

# Disable the watchlist feature until k8s-dqlite can handle it
--feature-gates=WatchList=false

microk8s start

然后在 Kubernetes 中为 Jenkins 创建服务账户和权限

无论 Jenkins 是部署在集群内部还是外部,最佳实践都是为它创建一个专用的 ServiceAccount,并通过 RBAC 授予其必要的权限。

microk8s kubectl create namespace jenkins
microk8s kubectl create serviceaccount jenkins-admin -n jenkins

为了让 Jenkins 能够在集群中创建和管理资源(如 Pod、Deployment 等),需要将一个具有足够权限的 ClusterRole 绑定到这个 ServiceAccount 上。

我们可以直接使用 Kubernetes 内置的 cluster-admin 角色(这是一个超级管理员角色,拥有所有权限),这对于快速设置或测试环境很方便。这里

microk8s kubectl create clusterrolebinding jenkins-admin-binding \
  --clusterrole=cluster-admin \
  --serviceaccount=jenkins:jenkins-admin

这里需要注意的是
 

在 Kubernetes 1.24 版本之前,当你创建一个 ServiceAccount 时,Kubernetes 会自动创建一个类型为 kubernetes.io/service-account-token 的 Secret,并将其与该 ServiceAccount 关联起来。

从 Kubernetes 1.24 版本开始,这个行为被改变了。为了增强安全性,Kubernetes 不再自动为新创建的 ServiceAccount 生成 Secret。你需要手动为其创建一个 Secret,或者在 Pod 中通过 serviceAccountToken 卷来挂载令牌。
我们需要手动为 jenkins-admin ServiceAccount 创建一个 Secret。
创建一个 YAML 文件,例如 jenkins-admin-secret.yaml,内容如下:

apiVersion: v1
kind: Secret
metadata:
  name: jenkins-admin-secret
  namespace: jenkins
  annotations:
    kubernetes.io/service-account.name: "jenkins-admin"  # 关键:将此 Secret 与 jenkins-admin ServiceAccount 关联
type: kubernetes.io/service-account-token

然后执行

microk8s kubectl apply -f jenkins-admin-secret.yaml

接下来提取令牌

microk8s kubectl get secret jenkins-admin-secret -n jenkins -o jsonpath='{.data.token}' | base64 -d

输出如下图

到这里microk8s基本配置完成,接下来是配置jenkins,在clouds中添加服务

这里需要注意的是microk8s端口用的是16443,需要忽略证书错误

凭据类型选择secret text,将刚才的内容填进去

其次要注意jekins的通道50000端口要放行

出现成功连接的提示就成功了。

更多推荐