k8s-1.25.0部署最新版 Jenkins 2.346.3
k8s版本:k8s-1.25.0(containerd运行时)
jenkins版本:Jenkins 2.346.3
1、先部署动态存储 local-path-provisioner
2、再部署 jenkins
Jenkins镜像
jenkins/jenkins:lts-jdk11
动态存储:Local Path Provisioner
基于HostPath使用动态PV
1、部署 local-path-provisioner
# 版本:local-path-provisioner-0.0.22
wget https://github.com/rancher/local-path-provisioner/archive/refs/tags/v0.0.22.tar.gz
# github.com下载加速地址
wget https://hub.fastgit.xyz/rancher/local-path-provisioner/archive/refs/tags/v0.0.22.tar.gz
tar xf v0.0.22.tar.gz && rm -rf v0.0.22.tar.gz
# 修改存储地址(/data/local-path-provisioner)
sed -i 's/opt/data/g' ~/local-path-provisioner-0.0.22/deploy/local-path-storage.yaml
kubectl apply -f ~/local-path-provisioner-0.0.22/deploy/local-path-storage.yaml
kubectl get pod -A -l app=local-path-provisioner
kubectl get pod -n local-path-storage
kubectl get storageclass
2、部署 Jenkins
cat > ~/jenkins/Jenkins-rbac.yaml << EOF
apiVersion: v1
kind: Namespace
metadata:
name: jenkins
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins
namespace: jenkins
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: jenkins
rules:
- apiGroups:
- '*'
resources:
- statefulsets
- services
- replicationcontrollers
- replicasets
- podtemplates
- podsecuritypolicies
- pods
- pods/log
- pods/exec
- podpreset
- poddisruptionbudget
- persistentvolumes
- persistentvolumeclaims
- jobs
- endpoints
- deployments
- deployments/scale
- daemonsets
- cronjobs
- configmaps
- namespaces
- events
- secrets
verbs:
- create
- get
- watch
- delete
- list
- patch
- update
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- list
- watch
- update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: jenkins
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: jenkins
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:serviceaccounts:jenkins
EOF
cat > ~/jenkins/Jenkins-Deployment.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
namespace: jenkins
labels:
app: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins:lts-jdk11
ports:
- containerPort: 8080
name: web
protocol: TCP
- containerPort: 50000
name: agent
protocol: TCP
#resources:
#limits:
#memory: 4Gi
#cpu: "2000m"
#requests:
#memory: 4Gi
#cpu: "2000m"
env:
- name: LIMITS_MEMORY
valueFrom:
resourceFieldRef:
resource: limits.memory
divisor: 1Mi
- name: JAVA_OPTS
value: -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
volumes:
- name: jenkins-home
persistentVolumeClaim:
claimName: jenkins-home
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-home
namespace: jenkins
spec:
storageClassName: "local-path"
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 2Ti
EOF
cat > ~/jenkins/Jenkins-Service.yaml << EOF
apiVersion: v1
kind: Service
metadata:
name: jenkins
namespace: jenkins
labels:
app: jenkins
spec:
selector:
app: jenkins
type: NodePort
ports:
- name: web
nodePort: 30080
port: 8080
targetPort: web
- name: agent
nodePort: 30081
port: 50000
targetPort: agent
EOF
kubectl apply -f Jenkins-rbac.yaml -f Jenkins-Deployment.yaml -f Jenkins-Service.yaml
登录密码
kubectl get pods -n jenkins -l app=jenkins
kubectl logs -f jenkins-746b5b5d65-r9m8q -n jenkins #初始化密钥就在日志里面
访问地址:192.168.1.201:30080