从零开始的云计算生活——第六十天,志在千里,使用Jenkins部署K8S
一.安装kubectl
1、配置yum源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
2、安装kubectl
yum install -y kubectl
二.关联k8s
1.设置配置文件
此时由于没有关联,使用命令会报错
去k8s主机将.kube内容拷贝过来
回来发现命令已经可以使用了
再将.kube文件考到Jenkins账户里
使用Jenkins账户登录并使用
2.下载k8s插件并重启
3.选择cloud
4.查看k8s地址
5.查看证书文件,并解密
6.复制证书
7.填写命名空间
8.终端生成Secret
创建jenkins账户
kubectl create sa jenkins
创建role角色
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:namespace: defaultname: pod-reader-role
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "list", "watch","create","update","delete"][root@k8s-master ~]# kubectl apply -f role.txt
##若要给于jenkins用户对default命名空间下所有资源具有所有权限,可以修改为 ["*"]
添加bindroling绑定
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:namespace: defaultname: pod-reader-role-binding
subjects:
- kind: ServiceAccountname: jenkinsnamespace: default
roleRef:kind: Rolename: pod-reader-roleapiGroup: rbac.authorization.k8s.io
生成token
kubectl -n default create token jenkins
最后将token填写道“凭据”中
9.填写凭证(1个小时有效)
下面把Jenkins地址填上,再点击保存按钮就完成了
三.创建项目
选择pipeline
pipeline {agent anystages {stage('Checkout Code') {steps {// 使用 SSH 方式拉取 Git 代码git branch: 'master', // 替换为你的分支名称url: 'git@192.168.71.131:/home/git/k8s' // 替换为你的 Git 仓库地址}}stage('Deploy LNMP') {steps {script {// 部署 LNMP 平台sh 'kubectl apply -f /var/lib/jenkins/workspace/k8s-lnmp/nginx.yml'}}}}
}
建立git库
创建yml文件
---apiVersion: apps/v1
kind: Deployment
metadata:name: nginxspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80---apiVersion: v1
kind: Service
metadata:name: nginxspec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80type: NodePort---apiVersion: apps/v1
kind: Deployment
metadata:name: mysqlspec:replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:5.7env:- name: MYSQL_ROOT_PASSWORDvalue: "123.com"ports:- containerPort: 3306---apiVersion: v1
kind: Service
metadata:name: mysqlspec:selector:app: mysqlports:- protocol: TCPport: 3306targetPort: 3306type: ClusterIP---apiVersion: apps/v1
kind: Deployment
metadata:name: phpspec:replicas: 1selector:matchLabels:app: phptemplate:metadata:labels:app: phpspec:containers:- name: phpimage: php:7.4-fpmports:- containerPort: 9000
更新仓库
git add .