基于k8s的CICD实现
master | node01 | jenkins+gitlab |
---|---|---|
2G | 2G | 4G |
192.168.1.20 | 192.168.1.21 | 192.168.1.22 |
docker服务,registry | docker服务 | docker服务、jenkns、gitlab |
模拟一个web服务
//环境准备好了之后,在master节点部署registry服务,将自定义镜像的v1版本上传到私有仓库中。当然其他的2台dockerhost也需要加入到registry服务中。
//提前准备好了私有镜像
[root@master ~]# docker pull registry:2
[root@master ~]# docker run -itd --name registry -p 5000:5000 --restart=always registry:2
95e38f1fd777cebf19a963c795946e91b8a76edd5e3544fd4f5dc0339f5960c4
三台节点都要修改
[root@master ~]# vim /usr/lib/systemd/system/docker.service
...
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.20:5000
...
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
[root@master ~]# docker load < httpd_v1.tar
[root@master ~]# docker push 192.168.1.20:5000/httpd:v1
另外俩节点可以下载
//要求,创建一个Deployment资源,replicas:2,镜像使用自定义镜像V1版本,然后创建一个SVC(type: NodePort, nodePort: 30034)资源对象,和此Deployment资源关联。
创建deployment
[root@master ~]# mkdir /opt/autoweb
[root@master ~]# cd /opt/autoweb/
[root@master autoweb]# vim myapp.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: myapp
spec:
replicas: 2
template:
metadata:
labels:
app: httpd
spec:
containers:
- name: myapp
image: 192.168.1.20:5000/httpd:v1
[root@master autoweb]# kubectl apply -f myapp.yaml
创建svc
[root@master autoweb]# vim mysvc.yaml
kind: Service
apiVersion: v1
metadata:
name: mysvc
spec:
selector:
app: httpd
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30039
[root@master autoweb]# kubectl apply -f mysvc.yaml
//验证各资源的部署情况
[root@master autoweb]# kubectl get deployments.
NAME READY UP-TO-DATE AVAILABLE AGE
myapp 2/2 2 2 3m43s
[root@master autoweb]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d
mysvc NodePort 10.97.18.79 <none> 80:30034/TCP 58s
[root@master autoweb]# kubectl describe svc mysvc
Name: mysvc
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{
"apiVersion":"v1","kind":"Service","metadata":{
"annotations":{
},"name":"mysvc","namespace":"default"},"spec":{
"ports":[{
"nodePort":30034,...
Selector: app=httpd
Type: NodePort
IP: 10.97.18.79
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 30034/TCP
Endpoints: 10.244.1.2:80,10.244.2.2:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
[root@master autoweb]