linux cpu占用率如何看
298
2022-09-12
k8s容器编排 (旧版)
k8s容器编排
文章目录
k8s容器编排
1:k8s集群的安装
1.1 k8s的架构1.2:修改IP地址、主机和host解析1.3:master节点安装etcd1.4:master节点安装kubernetes1.5:node节点安装kubernetes6:所有节点配置flannel网络7:配置master为镜像仓库
2:什么是k8s,k8s有什么功能?
2.1 k8s的核心功能2.2 k8s的历史2.3 k8s的安装2.4 k8s的应用场景
3:k8s常用的资源
3.1 创建pod资源3.2 ReplicationController资源
3.2.1 rc的滚动升级
3.3 service资源3.4 deployment资源3.5 tomcat+mysql练习
4:k8s的附加组件
4.1 dns服务4.2 namespace命令空间4.3 健康检查
4.3.1 探针的种类4.3.2 探针的检测方法4.3.3 liveness探针的exec使用4.3.4 liveness探针的liveness探针的tcpSocket使用4.3.6 readiness探针的dashboard服务4.5 通过apiservicer反向代理访问service
5: k8s弹性伸缩
5.1 安装heapster监控5.2 弹性伸缩
6:持久化存储
6.1:安装nfs服务端(10.0.0.11)6.2:在node节点安装nfs客户端6.3:创建pv和pvc6.4:创建mysql-rc,pod模板里使用volume6.5创建tomcat rc service6.6: 验证持久化6.7: 分布式存储glusterfs6.8 k8s 对接glusterfs存储
7:与jenkins集成实现ci/cd
7.1: 安装gitlab并上传代码7.2 安装jenkins,并自动构建docker镜像
1:k8s集群的安装
1.1 k8s的架构
组件 名称 | 说明 |
api-server | 提供rest接口关键服务进程,是k8s所有资源的增删改查等操作的唯一入口,也是ks8s集群控制的入口进程 |
etcd | k8s 数据库 存储服务 |
Controller-Manager | 是所有资源对象的自动化控制中心 |
kube-scheduler | 负责pod资源的调度工作 |
Node 组件名称 | 说明 |
kubelt | 负责pod对应容器的创建,停止工作,与master密切协助,实现k8s集群管理的基本功能 |
docker 引擎 | 负责本机容器的创建,管理功能。 |
除了核心组件,还有一些推荐的Add-ons:
组件名称 | 说明 |
kube-dns | 负责为整个集群提供DNS服务 |
Ingress Controller | 为服务提供外网入口 |
Heapster | 提供资源监控 |
Dashboard | 提供GUI |
Federation | 提供跨可用区的集群 |
Fluentd-elasticsearch | 提供集群日志采集、存储与查询 |
1.2:修改IP地址、主机和host解析
10.0.0.11 k8s-master
10.0.0.12 k8s-node-1
10.0.0.13 k8s-node-2
所有节点需要做hosts解析
base源
curl -o /etc/yum.repos.d/CentOS-Base.repo install etcd -yvim /etc/etcd/etcd.conf6行:ETCD_LISTEN_CLIENT_URLS="start etcd.servicesystemctl enable etcd.service#测试etcdctl set testdir/testkey0 0etcdctl get testdir/testkey0etcdctl -C cluster-health
##etcd原生支持做集群,
##作业1:安装部署etcd集群,要求三个节点
1.4:master节点安装kubernetes
yum install kubernetes-master.x86_64 -yvim /etc/kubernetes/apiserver 8行: KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"11行:KUBE_API_PORT="--port=8080"14行:KUBELET_PORT="--kubelet-port=10250"17行:KUBE_ETCD_SERVERS="--etcd-servers=/etc/kubernetes/config22行:KUBE_MASTER="--master=enable kube-apiserver.servicesystemctl restart kube-apiserver.servicesystemctl enable kube-controller-manager.servicesystemctl restart kube-controller-manager.servicesystemctl enable kube-scheduler.servicesystemctl restart kube-scheduler.service
#检查服务是否安装正常
[root@k8s-master ~]# kubectl get componentstatus NAME STATUS MESSAGE ERRORscheduler Healthy ok controller-manager Healthy ok etcd-0 Healthy {"health":"true"}
1.5:node节点安装kubernetes
yum install kubernetes-node.x86_64 -yvim /etc/kubernetes/config 22行:KUBE_MASTER="--master=/etc/kubernetes/kubelet5行:KUBELET_ADDRESS="--address=0.0.0.0"8行:KUBELET_PORT="--port=10250"11行:KUBELET_HOSTNAME="--hostname-override=10.0.0.12"14行:KUBELET_API_SERVER="--api-servers=enable kubelet.servicesystemctl start kubelet.servicesystemctl enable kube-proxy.servicesystemctl start kube-proxy.service
##在master节点检查
[root@k8s-master ~]# kubectl get nodesNAME STATUS AGE10.0.0.12 Ready 6m10.0.0.13 Ready 3s
6:所有节点配置flannel网络
##所有节点yum install flannel -ysed -i 's#/etc/sysconfig/flanneld##master节点:etcdctl mk /atomic.io/network/config '{ "Network": "172.16.0.0/16" }'yum install docker -ysystemctl enable flanneld.service systemctl restart flanneld.service service docker restartsystemctl restart kube-apiserver.servicesystemctl restart kube-controller-manager.servicesystemctl restart kube-scheduler.service##node节点:systemctl enable flanneld.service systemctl restart flanneld.service service docker restartsystemctl restart kubelet.servicesystemctl restart kube-proxy.service测试flannel是否可以通信##所有几点docker run -it docker.io/busybox:latest/ # ping 容器ip地址。
解决flannel无法连通问题
###所有节点iptables -P FORWARD ACCEPT //临时生效sed -i '16a ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT' /usr/lib/systemd/system/docker.service && systemctl enable docker && systemctl restart docker //永久生效
7:配置master为镜像仓库
#所有节点vim /etc/sysconfig/dockerOPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --registry-mirror=--insecure-registry=10.0.0.11:5000'systemctl restart docker#master节点docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
2:什么是k8s,k8s有什么功能?
k8s是一个docker集群的管理工具
2.1 k8s的核心功能
自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。
弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量
服务的自动发现和负载均衡: 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。
滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。
2.2 k8s的历史
2014年 docker容器编排工具,立项
2015年7月 发布kubernetes 1.0, 加入cncf
2016年,kubernetes干掉两个对手,docker swarm,mesos 1.2版
2017年
2018年 k8s 从cncf基金会 毕业
2019年: 1.13, 1.14 ,1.15
cncf cloud native compute foundation
kubernetes (k8s): 希腊语 舵手,领航 容器编排领域,
谷歌16年容器使用经验,borg容器管理平台,使用golang重构borg,kubernetes
2.3 k8s的安装
yum安装 1.5 最容易安装成功,最适合学习的
源码编译安装—难度最大 可以安装最新版
二进制安装—步骤繁琐 可以安装最新版 shell,ansible,saltstack
kubeadm 安装最容易, 网络 可以安装最新版
minikube 适合开发人员体验k8s, 网络
2.4 k8s的应用场景
k8s最适合跑微服务项目!
3:k8s常用的资源
3.1 创建pod资源
k8s yaml的主要组成
apiVersion: v1 api版本kind: pod 资源类型metadata: 属性spec: 详细
k8s_pod.yaml
mkdir pod && cd podvim k8s_pod.yamlapiVersion: v1 #版本kind: Pod #资源类型metadata: #资源的元数据/属性 name: nginx #资源的名字,在同一个namespace中必须唯一 labels: app: web #标签spec: containers: # 指定该资源的内容 - name: nginx #容器的名字 image: 10.0.0.11:5000/nginx:1.13 ports: - containerPort: 80 #容器对外的端口 kubectl create -f k8s_pod.yamlpod "nginx" created#长时间处于创建状态[root@k8s-master pod]# kubectl get podNAME READY STATUS RESTARTS AGEnginx 0/1 ContainerCreating 0 1m查看报错信息:kubectl describe pod nginx "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)" 提示:pod镜像无法pull下来解决方法上传pod到仓库中##所有节点操作vim /etc/kubernetes/kubelet #指定pod镜像路径。KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=172.16.20.100/library/pod-infrastructure:latest"systemctl restart kubelet
pod资源:至少由两个容器组成,pod基础容器和业务容器组成
pod配置文件2:
apiVersion: v1kind: Podmetadata: name: test labels: app: webspec: containers: - name: nginx image: 10.0.0.11:5000/nginx:1.13 ports: - containerPort: 80 - name: busybox image: 10.0.0.11:5000/busybox:latest command: ["sleep","10000"]
pod是k8s最小的资源单位
3.2 ReplicationController资源
rc:保证指定数量的pod始终存活,rc通过标签选择器来关联pod
k8s资源的常见操作:
kubectl create -f xxx.yaml
kubectl get pod|rc
kubectl describe pod nginx
kubectl delete pod nginx 或者kubectl delete -f xxx.yaml
kubectl edit pod nginx
创建一个rc
apiVersion: v1 #版本kind: ReplicationController #指定创建资源的角色/类型metadata: #资源的元数据/属性 name: nginx #资源的名字,在同一个namespace中必须唯一spec: replicas: 5 #副本数量5 selector: app: myweb #标签 template: #这里Pod的定义 metadata: labels: app: myweb #Pod的label spec: # 指定该资源的内容 containers: - name: myweb image: 10.0.0.11:5000/nginx:1.13 ports: - containerPort: 80
3.2.1 rc的滚动升级
新建一个nginx-rc1.15.yaml
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z3mSw8mj-1594286656428)(assets/1563093237250.png)]
升级kubectl rolling-update nginx -f nginx-rc1.15.yaml --update-period=10s-f 新版本的yaml--ipdate-period=10s 升级间隔10s回滚kubectl rolling-update nginx2 -f nginx-rc.yaml --update-period=1s
3.3 service资源
service帮助pod暴露端口
创建一个service
apiVersion: v1 #版本kind: Service # 指明资源类型是 servicemetadata: name: myweb # service 的名字是 type: NodePort #ClusterIP ports: - port: 80 #clusterIP nodePort: 30000 #nodeport targetPort: 80 #pod port selector: app: myweb2 # 指明哪些 label 的 pod 作为 service 的后端
修改nodePort范围
master节点vim /etc/kubernetes/apiserverKUBE_API_ARGS="--service-node-port-range=3000-50000"systemctl restart kub-apiserver
service默认使用iptables来实现负载均衡, k8s 1.8新版本中推荐使用lvs(四层负载均衡)
3.4 deployment资源
有rc在滚动升级之后,会造成服务访问中断,于是k8s引入了deployment资源
创建deployment
apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: nginx-deploymentspec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: 10.0.0.11:5000/nginx:1.13 ports: - containerPort: 80 resources: limits: cpu: 100m requests: cpu: 100m
deployment升级和回滚
#命令行创建deploymentkubectl run nginx --image=10.0.0.11:5000/nginx:1.13 --replicas=3 --record#命令行升级版本kubectl set image deploy nginx nginx=10.0.0.11:5000/nginx:1.15#查看deployment所有历史版本kubectl rollout history deployment nginx#deployment回滚到上一个版本kubectl rollout undo deployment nginx#deployment回滚到指定版本kubectl rollout undo deployment nginx --to-revision=2
3.5 tomcat+mysql练习
在k8s中容器之间相互访问,通过VIP地址!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hGHKLoBy-1594286656431)(F:\Linux\老男孩文档\image\image-20200709143313499.png)]
4:k8s的附加组件
4.1 dns服务
安装dns服务
1:上传dns_docker镜像包2:导入dns_docker镜像包(node2节点)3:导入skydns-rc.yaml\skydns-svc.修改skydns-rc.yaml#选择部署的nodes几点spec: nodeSelector: kubernetes.io/hostname: 10.0.0.13 containers: 85行 - --kube-master-url= 改为本机地址。4:创建dns服务kubectl create -f skydns-rc.yamlkubectl create -f skydns-svc.yaml5:检查kubectl get all --namespace=kube-system6:修改所有node节点kubelet的配置文件vim /etc/kubernetes/kubeletKUBELET_ARGS="--cluster_dns=10.254.230.254 --cluster_domain=cluster.local"systemctl restart kubelet
4.2 namespace命令空间
namespace做资源隔离
4.3 健康检查
4.3.1 探针的种类
livenessProbe:健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器
readinessProbe:可用性检查,周期性检查服务是否可用,不可用将从service的endpoints中移除
4.3.2 探针的检测方法
exec:执行一段命令请求的返回状态码tcpSocket:测试某个端口是否能够连接
4.3.3 liveness探针的exec使用
vi nginx_pod_exec.yaml apiVersion: v1kind: Podmetadata: name: execspec: containers: - name: nginx image: 10.0.0.11:5000/nginx:1.13 ports: - containerPort: 80 args: - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5
4.3.4 liveness探针的 nginx_pod_apiVersion: v1kind: Podmetadata: name: containers: - name: nginx image: 10.0.0.11:5000/nginx:1.13 ports: - containerPort: 80 livenessProbe: path: /index.html port: 80 initialDelaySeconds: 3 periodSeconds: 3
4.3.5 liveness探针的tcpSocket使用
vi nginx_pod_tcpSocket.yamlapiVersion: v1kind: Podmetadata: name: tcpSocketspec: containers: - name: nginx image: 10.0.0.11:5000/nginx:1.13 ports: - containerPort: 80 livenessProbe: tcpSocket: port: 80 initialDelaySeconds: 3 periodSeconds: 3
4.3.6 readiness探针的 nginx-rc-v1kind: ReplicationControllermetadata: name: readinessspec: replicas: 2 selector: app: readiness template: metadata: labels: app: readiness spec: containers: - name: readiness image: 10.0.0.11:5000/nginx:1.13 ports: - containerPort: 80 readinessProbe: path: /qiangge.html port: 80 initialDelaySeconds: 3 periodSeconds: 3
4.4 dashboard服务
1:上传并导入镜像,打标签
2:创建dashborad的deployment和service
3:访问通过apiservicer反向代理访问service
第一种:NodePort类型 type: NodePort ports: - port: 80 targetPort: 80 nodePort: 30008第二种:ClusterIP类型 type: ClusterIP ports: - port: 80 targetPort: 80
5: k8s弹性伸缩
k8s弹性伸缩,需要附加插件heapster监控
5.1 安装heapster监控
1:上传并导入镜像,打标签
ls *.tar.gz
for n in ls *.tar.gz;do docker load -i $n ;done
docker tag docker.io/kubernetes/heapster_grafana:v2.6.0 10.0.0.11:5000/heapster_grafana:v2.6.0
docker tag docker.io/kubernetes/heapster_influxdb:v0.5 10.0.0.11:5000/heapster_influxdb:v0.5
docker tag docker.io/kubernetes/heapster:canary 10.0.0.11:5000/heapster:canary
2:上传配置文件,kubectl create -f .
修改配置vim heapster-controller.yaml
containers: - name: heapster image: 10.0.0.11:5000/heapster:canary imagePullPolicy: IfNotPresent
3:打开dashboard验证
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R6PDvVyp-1594286656439)(assets/1563681008909.png)]
5.2 弹性伸缩
1:修改rc的配置文件
containers: - name: myweb image: 10.0.0.11:5000/nginx:1.13 ports: - containerPort: 80 resources: limits: cpu: 100m requests: cpu: 100m
2:创建弹性伸缩规则
kubectl autoscale -n qiangge replicationcontroller myweb --max=8 --min=1 --cpu-percent=8
3:测试
ab -n 1000000 -c 40 persistent volume 全局的资源 pv,node
pvc: persistent volume claim 局部的资源(namespace)pod,rc,svc
6.1:安装nfs服务端(10.0.0.11)
yum install nfs-utils.x86_64 -ymkdir /datavim /etc/exports/data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)systemctl start rpcbindsystemctl start nfs
6.2:在node节点安装nfs客户端
yum install nfs-utils.x86_64 -yshowmount -e 10.0.0.11
6.3:创建pv和pvc
#创建pv[root@k8s-master pv]# cat mysql_pv.yaml apiVersion: v1kind: PersistentVolumemetadata: name: tomcat-mysql labels: type: nfs001spec: capacity: storage: 10Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Recycle nfs: path: "/data/tomcat" server: 172.16.20.101 readOnly: false #创建pv kubetcl create -f mysql_pv.yaml #查看PV信息 kubetcl get pv #创建pvc[root@k8s-master pv]# cat mysql_pvc.yaml apiVersion: v1kind: PersistentVolumeClaimmetadata: name: tomcat-mysqlspec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi #创建pv kubetcl create -f mysql_pvc.yaml #查看PV信息 kubetcl get pvc
6.4:创建mysql-rc,pod模板里使用volume
#定义mysql pod rc 文件[root@k8s-master pv]# cat mysql-rc-pvc.yml apiVersion: v1kind: ReplicationControllermetadata: name: mysqlspec: replicas: 1 selector: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: 172.16.20.103:5000/mysql:5.7 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: '123456' volumeMounts: ##挂载设置 - name: tomcat-mysql ##挂载设备的名字,与volumes[*].name 需要对应 mountPath: /var/lib/mysql ##挂载到容器的某个路径下 volumes: ##定义一组挂载设备 - name: tomcat-mysql ##定义一个挂载设备的名字 persistentVolumeClaim: claimName: tomcat-mysql ##指定引用PVC名称#创建mysql podkubetcd create -f mysql-rc-pvc.yml #定义mysql service VIP 文件 [root@k8s-master pv]# cat mysql-svc.yml apiVersion: v1kind: Servicemetadata: name: mysqlspec: ports: - port: 3306 targetPort: 3306 selector: app: mysql
6.5创建tomcat rc service
#自定义tomcat pod rc文件[root@k8s-master pv]# cat tomcat-rc.yml apiVersion: v1kind: ReplicationControllermetadata: name: mywebspec: replicas: 1 selector: app: myweb template: metadata: labels: app: myweb spec: containers: - name: myweb image: 172.16.20.103:5000/tomcat-app:v2 ports: - containerPort: 8080 env: - name: MYSQL_SERVICE_HOST value: 'mysql' - name: MYSQL_SERVICE_PORT value: '3306' #创建tomcat podkubetcd create -f tomcat-rc.yml #自定义tomcat service VIP 文件[root@k8s-master pv]# cat tomcat-svc.yml apiVersion: v1kind: Servicemetadata: name: mywebspec: type: NodePort ports: - port: 8080 nodePort: 30008 selector: app: myweb#创建tomcat Service kubetcd create -f tomcat-svc.yml
6.6: 验证持久化
验证方法1:删除mysql的pod,数据库不丢
kubectl delete pod mysql-gt054
验证方法2:查看nfs服务端,是否有mysql的数据文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BmevnJdP-1594286656450)(F:\Linux\老男孩文档\image\image-20200418000016240.png)]
6.7: 分布式存储glusterfs
主机名 | ip地址 | 环境 |
glusterfs01 | 10.0.0.14 | centos7.6,内存512M,增加两块硬盘10G,host解析 |
glusterfs02 | 10.0.0.15 | centos7.6,内存512M,增加两块硬盘10G,host解析 |
glusterfs03 | 10.0.0.16 | centos7.6,内存512M,增加两块硬盘10G,host解析 |
a: 什么是glusterfs
Glusterfs是一个开源分布式文件系统,具有强大的横向扩展能力,可支持数PB存储容量和数千客户端,通过网络互联成一个并行的网络文件系统。具有可扩展性、高性能、高可用性等特点。
b: 安装glusterfs
所有节点:yum install centos-release-gluster -yyum install install glusterfs-server -ysystemctl start glusterd.servicesystemctl enable glusterd.servicemkdir -p /gfs/test1mkdir -p /gfs/test2
c: 添加存储资源池
pool #存储资源池peer #节点volume #卷 start 分布式复制卷brick #存储单元(硬盘)master节点:gluster pool listgluster peer probe k8s-node1gluster peer probe k8s-node2gluster pool list
d: glusterfs卷管理
创建分布式复制卷gluster volume create qiangge replica 2 k8s-master:/gfs/test1 k8s-master:/gfs/test2 k8s-node1:/gfs/test1 k8s-node1:/gfs/test2 force启动卷gluster volume start qiangge查看卷gluster volume info qiangge 挂载卷mount -t glusterfs 10.0.0.11:/qiangge /mnt
e: 分布式复制卷讲解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N72BR8ta-1594286656452)(F:\Linux\老男孩文档\image\image-20200418162251447.png)]
f: 分布式复制卷扩容
扩容前查看容量:df -h扩容命令:gluster volume add-brick qiangge k8s-node2:/gfs/test1 k8s-node2:/gfs/test2 force扩容后查看容量:df -h
6.8 k8s 对接glusterfs存储
a:创建endpoint
vi glusterfs-ep.yamlapiVersion: v1kind: Endpointsmetadata: name: glusterfs namespace: defaultsubsets:- addresses: - ip: 10.0.0.14 - ip: 10.0.0.15 - ip: 10.0.0.16 ports: - port: 49152 protocol: TCP
b: 创建service
vi glusterfs-svc.yamlaapiVersion: v1kind: Servicemetadata: name: glusterfs namespace: defaultspec: ports: - port: 49152 protocol: TCP targetPort: 49152 sessionAffinity: None type: ClusterIP
c: 创建gluster类型pv
vi gluster_pv.yamlaapiVersion: v1kind: PersistentVolumemetadata: name: gluster labels: type: glusterfsspec: capacity: storage: 50Gi accessModes: - ReadWriteMany glusterfs: endpoints: "glusterfs" path: "qiangge" readOnly: false
d: 创建pvc
略
e:在pod中使用gluster
vi nginx_pod.yaml…… volumeMounts: - name: nfs-vol2 mountPath: /usr/share/nginx/html volumes: - name: nfs-vol2 persistentVolumeClaim: claimName: gluster
7:与jenkins集成实现ci/cd
ip地址 | 服务 | 内存 |
10.0.0.11 | kube-apiserver 8080 | 1G |
10.0.0.13 | k8s-node2 | 2G |
10.0.0.14 | jenkins(tomcat + jdk) 8080 + kubelet | 1G |
10.0.0.15 | gitlab 8080,80 | 2G |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ph51e8Uo-1594286656454)(assets/1564559266936.png)]
7.1: 安装gitlab并上传代码
#a:安装wget localinstall gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm -y#b:配置vim /etc/gitlab/gitlab.rbexternal_url '= false#c:应用并启动服务gitlab-ctl reconfigure#使用浏览器访问/srv/rz -Eunzip xiaoniaofeifei.zip rm -fr xiaoniaofeifei.zip git config --global user.name "Administrator"git config --global user.email "admin@example.com"git initgit remote add origin add . #增加文件git commit -m "Initial commit" #备注信息git push -u origin master #上传到masteryum install docker -yvim dockerfileFROM 10.0.0.11:5000/nginx:1.13ADD . /usr/share/nginx/htmlgit add .git commit -m "add dockerfile"git push -u origin master
7.2 安装jenkins,并自动构建docker镜像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xHuYOQV2-1594286656457)(F:\Linux\老男孩文档\image\image-20200419000002035.png)]
1:安装jenkins
cd /opt/rz -Erpm -ivh jdk-8u102-linux-x64.rpm mkdir /apptar xf apache-tomcat-8.0.27.tar.gz -C /apprm -fr /app/apache-tomcat-8.0.27/webapps/*mv jenkins.war /app/apache-tomcat-8.0.27/webapps/ROOT.wartar xf jenkin-data.tar.gz -C /root/app/apache-tomcat-8.0.27/bin/startup.sh netstat -lntup
2:访问jenkins
访问-t rsa
b:复制公钥粘贴gitlab上
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vnHOAUC-1594286656465)(F:\Linux\老男孩文档\image\image-20200419174505639.png)]
c:jenkins上创建全局凭据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PmBMlXEa-1594286656468)(F:\Linux\老男孩文档\image\image-20200419174521094.png)]
4:拉取代码测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yC7n3KWz-1594286656471)(F:\Linux\老男孩文档\image\image-20200419174542713.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-onw68CWv-1594286656472)(F:\Linux\老男孩文档\image\image-20200419174604996.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3zmXMYXA-1594286656474)(F:\Linux\老男孩文档\image\image-20200419174722473.png)]
5:编写dockerfile并测试
#vim dockerfileFROM 10.0.0.11:5000/nginx:1.13add . /usr/share/nginx/html
#添加docker build构建时不add的文件
vim .dockerignore
dockerfile
docker build -t xiaoniao:v1 .
docker run -d -p 88:80 xiaoniao:v1
打开浏览器测试访问xiaoniaofeifei的项目
6:上传dockerfile和.dockerignore到私有仓库
git add docker .dockerignore
git commit -m “fisrt commit”
git push -u origin master
修改jenkins 工程配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZoAwmpnJ-1594286656475)(assets/1563702843438.png)]
docker build -t 10.0.0.11:5000/test:v B U I L D I D . d o c k e r p u s h 10.0.0.11 : 5000 / t e s t : v BUILD_ID . docker push 10.0.0.11:5000/test:v BUILDID.dockerpush10.0.0.11:5000/test:vBUILD_ID
7.3 jenkins自动部署应用到k8s
kubectl -s 10.0.0.11:8080 get nodes
if [ -f /tmp/xiaoniao.lock ];then docker build -t 10.0.0.11:5000/xiaoniao:v$BUILD_ID . docker push 10.0.0.11:5000/xiaoniao:v$BUILD_ID kubectl -s 10.0.0.11:8080 set image -n xiaoniao deploy xiaoniao xiaoniao=10.0.0.11:5000/xiaoniao:v$BUILD_ID echo "更新成功"else docker build -t 10.0.0.11:5000/xiaoniao:v$BUILD_ID . docker push 10.0.0.11:5000/xiaoniao:v$BUILD_ID kubectl -s 10.0.0.11:8080 create namespace xiaoniao kubectl -s 10.0.0.11:8080 run xiaoniao -n xiaoniao --image=10.0.0.11:5000/xiaoniao:v$BUILD_ID --replicas=3 --record kubectl -s 10.0.0.11:8080 expose -n xiaoniao deployment xiaoniao --port=80 --type=NodePort port=`kubectl -s 10.0.0.11:8080 get svc -n xiaoniao|grep -oP '(?<=80:)\d+'` echo "你的项目地址访问是 touch /tmp/xiaoniao.lockfi
jenkins一键回滚
kubectl -s 10.0.0.11:8080 rollout undo -n xiaoniao deployment xiaoniao
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~