Kubernetes(k8s)的deployment资源
2021-02-02 05:17
标签:F12 连接mysql already miss you push 数据 之间 host 1、为什么K8s要引入deployment资源。 答:deployment也是保证pod高可用的一种方式,明明已经有RC(Replication Controller),为什么还要引入deployment呢?是因为deployment解决了RC(Replication Controller)的一个痛点。是因为RC在进行版本升级的时候,会造成一个问题,就是它的svc(Service)短时间内访问不了了,deployment就是解决这个问题的。 2、创建一个deployment的配置文件。 具体操作,如下所示: 然后开始创建deployment,如下所示: 然后创建deployment资源完毕之后,可以查看创建的资源,如下所示: 我这里明显没有启动起来,说镜像拉取错误,仔细检查是nginx-deploy.yaml配置文件,在配置image的地方写错了,漏写了端口号导致的。
再使用命令创建一遍,就发现创建好了。deployment并不像RC直接去启动Pod,它们之间的区别是deployment会启动一个RS,RS拥有RC的百分之九十的功能,比RC的功能还多一些,由RC再去启动三个POD。 此时,已经有了一个deployment,那么如何让Pod里面的服务让外界访问呢,我们也是需要创建一个service的,除了使用配置文件进行创建,还可以通过命令进行关联。 下面可以对nginx进行版本升级,不用创建配置文件,这里可以直接修改配置文件即可。 具体修改内容,如下所示: 修改,保存之后再使用curl命令进行查看,发现版本已经进行了升级了的。 可以通过命令查看升级之后三个Pod节点的情况,这里可以看到多了一个rs/nginx-deployment-3181297949,之前的那个rs/nginx-deployment-3018768667都被设置为了0。 注意:这里我也出现了升级之后无法将Node2节点的Pod启动成功的情况,我重启了三台机器,三个节点的Pod都有了,这里可能是因为从私有仓库下载的地方没有配置好,重启之前Node2节点使用docker images命令是无法查看到私有仓库的nginx:1.15版本的,重启之后才可以看到。 deployment的回滚操作,如下所示: [root@k8s-master ~]# kubectl rollout undo deployment nginx-deployment 可以查看deployment存在那些历史版本,如下所示: 如果想要查看到历史版本中的改变记录、镜像版本,需要使用新的方式进行发布。 具体操作,如下所示: 回滚到指定的版本,undo是回滚到上一个版本,操作,如下所示: 总结:deployment比RC更好使哦,deployment不依赖于配置文件,会成为主流的哦,重点使用。 3、k8s中不同类型的pod之间如何相互访问?例如,web服务如何访问db服务呢? 答:在k8s里面,服务与服务之间需要相互访问的时候,需要借助于VIP,因为每个Pod的ip地址是不固定的。可以固定的是VIP(可以理解为是VIP的地址ClusterIp),在k8s中,Pod与Pod之间相互访问就是通过VIP来进行访问的。比如,web服务想要访问db服务,web服务就要知道db服务的VIP(可以理解为是VIP的地址ClusterIp),不然无法进行访问。 mysql-rc.yml 这个RC保证mysql的Pod高可用。mysql-svc.yml 这个SVC保证tomcat被访问。tomcat-rc.yml 这个RC保证tomcat是高可用的。tomcat-svc.yml 这个svc保证tomcat被外界所访问。 如果是自己向服务器传包,那么可以直接使用docker的命令进行操作即可。如果想从docker的仓库里面下载,需要修改一下这个配置,不然下载不动。 [root@k8s-master ~]# vim /etc/docker/daemon.json 使用国内的docker的镜像加速,可以不用配置自己的私有仓库的哈。 创建mysql的RC(Replication Controller)副本控制器。 [root@k8s-master tomcat_demo]# vim mysql-rc.yml 操作,如下所示: 执行创建命令,创建 mysql的RC(Replication Controller)副本控制器。 [root@k8s-master tomcat_demo]# kubectl create -f mysql-rc.yml 4、插播一个问题,具体就是我三台centos7机器,docker的版本是1.13.1,然后搭了私有仓库,但是呢,每次下载都不好使,除了第一次搭建好,后来都是讲机器挂起了,直接使用的,前几篇都遇到这个问题了,原因是私有仓库的docker进程都没有了。 可以使用docker ps查看是否还运行着私有仓库registry。 注意:报错的原因,如下所示: 大致的意思是:来自守护进程的错误响应:冲突。容器名称“/runoob-nginx-test”为已在容器“a27987d97039c8596ad2a2150cee9e3fbe7580c8131e9f258aea8a922c22a237”中使用。您必须删除(或重命名)该容器才能重用该名称。 解决的方法:使用docker ps 时查看发现没有运行,使用 docker ps -l , 可以看到有一个nginx容器 ( -l 是显示最新创建的容器包括所有状态) 。删除容器重名的容器再次运行就行。使用docker ps只能查看正在运行的容器,因为nginx这个容器已经给被停止了所以看不到。 然后将你的镜像上传到私有仓库里面,如下所示: 1 # 声明api的版本。
2 apiVersion: extensions/v1beta1
3 # kind代表资源的类型,资源是Deployment。
4 kind: Deployment
5 # 资源叫什么名字,是在其属性metadata里面的。
6 metadata:
7 # 第一个属性name的值是myweb,即Service的名字就叫做myweb。
8 name: nginx-deployment
9 # spec是详细,详细里面定义了一个容器。
10 spec:
11 # 副本的数量,比RC少了一个selector。
12 replicas: 3
13 # 模板,都是使用模板来启动Pod的。
14 template:
15 # 资源叫什么名字,是在其属性metadata里面的。
16 metadata:
17 # 给Pod贴上了一个标签,标签是app: nginx,标签是有一定的作用的。
18 labels:
19 app: nginx
20 # spec是详细,详细里面定义了一个容器。
21 spec:
22 # 定义一个容器,可以声明多个容器的。
23 containers:
24 # 容器的名称叫做nginx
25 - name: nginx
26 # 使用了什么镜像,可以使用官方公有的,也可以使用私有的。
27 image: 192.168.110.133/nginx:1.13
28 # ports定义容器的端口
29 ports:
30 # 容器的端口是80,如果容器有多个端口,可以在后面接着写一行即可。
31 - containerPort: 80
1 [root@k8s-master ~]# cd k8s/
2 [root@k8s-master k8s]# ls
3 pod rc svc
4 [root@k8s-master k8s]# mkdir deploy
5 [root@k8s-master k8s]# cd deploy/
6 [root@k8s-master deploy]# ls
7 [root@k8s-master deploy]# kubectl get rc
8 NAME DESIRED CURRENT READY AGE
9 myweb 3 3 3 4d
10 [root@k8s-master deploy]# kubectl delete rc myweb
11 replicationcontroller "myweb" deleted
12 [root@k8s-master deploy]# kubectl get rc
13 No resources found.
14 [root@k8s-master deploy]# kubectl get svc
15 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
16 kubernetes 10.254.0.1
1 [root@k8s-master deploy]# kubectl create -f nginx-deploy.yaml
2 deployment "nginx-deployment" created
1 [root@k8s-master deploy]# kubectl get all -o wide
2 NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
3 deploy/nginx-deployment 3 3 3 0 2m
4
5 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
6 svc/kubernetes 10.254.0.1
1 [root@k8s-master deploy]# kubectl get deployment
2 NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
3 nginx-deployment 3 3 3 0 5m
4 [root@k8s-master deploy]# kubectl delete deployment nginx-deployment
5 deployment "nginx-deployment" deleted
6 [root@k8s-master deploy]# kubectl get deployment
7 No resources found.
8 [root@k8s-master deploy]# kubectl get all -o wide
9 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
10 svc/kubernetes 10.254.0.1
1 [root@k8s-master ~]# kubectl expose deployment nginx-deployment --port=80 --type=NodePort
2 service "nginx-deployment" exposed
3 [root@k8s-master ~]# kubectl get all -o wide
4 NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
5 deploy/nginx-deployment 3 3 3 3 1h
6
7 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
8 svc/kubernetes 10.254.0.1
1 [root@k8s-master ~]# kubectl edit deployment nginx-deployment
1 [root@k8s-master ~]# curl -I 192.168.110.133:36848
2 HTTP/1.1 200 OK
3 Server: nginx/1.15.12
4 Date: Wed, 17 Jun 2020 03:09:26 GMT
5 Content-Type: text/html
6 Content-Length: 612
7 Last-Modified: Tue, 16 Apr 2019 13:08:19 GMT
8 Connection: keep-alive
9 ETag: "5cb5d3c3-264"
10 Accept-Ranges: bytes
11
12 [root@k8s-master ~]#
1 [root@k8s-master ~]# kubectl get all -o wide
2 NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
3 deploy/nginx-deployment 3 3 3 3 1h
4
5 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
6 svc/kubernetes 10.254.0.1
1 [root@k8s-master ~]# curl -I 192.168.110.133:36848
2 HTTP/1.1 200 OK
3 Server: nginx/1.15.12
4 Date: Wed, 17 Jun 2020 03:23:53 GMT
5 Content-Type: text/html
6 Content-Length: 612
7 Last-Modified: Tue, 16 Apr 2019 13:08:19 GMT
8 Connection: keep-alive
9 ETag: "5cb5d3c3-264"
10 Accept-Ranges: bytes
11
12 [root@k8s-master ~]# kubectl roll
13 rolling-update rollout
14 [root@k8s-master ~]# kubectl rollout undo deployment nginx-deployment
15 deployment "nginx-deployment" rolled back
16 [root@k8s-master ~]# curl -I 192.168.110.133:36848
17 HTTP/1.1 200 OK
18 Server: nginx/1.13.12
19 Date: Wed, 17 Jun 2020 03:25:22 GMT
20 Content-Type: text/html
21 Content-Length: 612
22 Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
23 Connection: keep-alive
24 ETag: "5acb8e45-264"
25 Accept-Ranges: bytes
26
27 [root@k8s-master ~]#
1 [root@k8s-master ~]# kubectl rollout history deployment nginx-deployment
2 deployments "nginx-deployment"
3 REVISION CHANGE-CAUSE
4 2
1 版本发布
2 kubectl run nginx --image=192.168.110.133:5000/nginx:1.13 --replicas=3
3
4 版本升级
5 kubectl set image deploy nginx nginx=192.168.110.133:5000/nginx:1.15
6
7 历史版本查询
8 [root@k8s-master ~]# kubectl rollout history deployment nginx
1 [root@k8s-master ~]# kubectl run nginx --image=192.168.110.133:5000/nginx:1.13 --replicas=3 --record
2 deployment "nginx" created
3 [root@k8s-master ~]# kubectl rollout history deployment nginx-deployment
4 deployments "nginx-deployment"
5 REVISION CHANGE-CAUSE
6 2
1 [root@k8s-master ~]# kubectl rollout history deployment nginx
2 deployments "nginx"
3 REVISION CHANGE-CAUSE
4 1 kubectl run nginx --image=192.168.110.133:5000/nginx:1.13 --replicas=3 --record
5 2 kubectl set image deploy nginx nginx=192.168.110.133:5000/nginx:1.15
6
7 [root@k8s-master ~]# kubectl rollout undo deployment nginx --to-revision=1
8 deployment "nginx" rolled back
9 [root@k8s-master ~]# kubectl rollout history deployment nginx
10 deployments "nginx"
11 REVISION CHANGE-CAUSE
12 2 kubectl set image deploy nginx nginx=192.168.110.133:5000/nginx:1.15
13 3 kubectl run nginx --image=192.168.110.133:5000/nginx:1.13 --replicas=3 --record
14
15 [root@k8s-master ~]#
1 [root@k8s-master ~]# cd k8s/
2 [root@k8s-master k8s]# ls
3 deploy pod rc svc
4 [root@k8s-master k8s]# clear
5 [root@k8s-master k8s]# wget https://www.qstack.com.cn/tomcat_demo.zip
6 --2020-06-17 11:49:34-- https://www.qstack.com.cn/tomcat_demo.zip
7 Resolving www.qstack.com.cn (www.qstack.com.cn)... 123.125.46.149, 111.202.85.37
8 Connecting to www.qstack.com.cn (www.qstack.com.cn)|123.125.46.149|:443... connected.
9 HTTP request sent, awaiting response... 200 OK
10 Length: 1486 (1.5K) [application/zip]
11 Saving to: ‘tomcat_demo.zip’
12
13 100%[======================================================================================>] 1,486 --.-K/s in 0.01s
14
15 2020-06-17 11:49:34 (106 KB/s) - ‘tomcat_demo.zip’ saved [1486/1486]
16
17 [root@k8s-master k8s]# ls
18 deploy pod rc svc tomcat_demo.zip
19 [root@k8s-master k8s]# unzip tomcat_demo.zip
20 Archive: tomcat_demo.zip
21 creating: tomcat_demo/
22 inflating: tomcat_demo/mysql-rc.yml
23 inflating: tomcat_demo/mysql-svc.yml
24 inflating: tomcat_demo/tomcat-rc.yml
25 inflating: tomcat_demo/tomcat-svc.yml
26 [root@k8s-master k8s]# cd tomcat_demo/
27 [root@k8s-master tomcat_demo]# ls
28 mysql-rc.yml mysql-svc.yml tomcat-rc.yml tomcat-svc.yml
29 [root@k8s-master tomcat_demo]#
1 {
2 "insecure-registries": ["192.168.110.133:5000"],
3 "registry-mirrors" : ["https://registry.docker-cn.com"]
4 }
1 [root@k8s-master rc]# docker tag docker.io/mysql:5.7.30 192.168.110.133:5000/mysql:5.7.30
2 [root@k8s-master rc]# docker push 192.168.110.133:5000/mysql:5.7.30
3 [root@k8s-master ~]# docker images
4 REPOSITORY TAG IMAGE ID CREATED SIZE
5 192.168.110.133:5000/mysql 5.7.30 9cfcce23593a 8 days ago 448 MB
6 docker.io/mysql 5.7.30 9cfcce23593a 8 days ago 448 MB
7 docker.io/busybox latest 1c35c4412082 2 weeks ago 1.22 MB
8 docker.io/registry latest 708bc6af7e5e 4 months ago 25.8 MB
9 docker.io/nginx 1.15 53f3fd8007f7 13 months ago 109 MB
10 192.168.110.133:5000/nginx 1.15 53f3fd8007f7 13 months ago 109 MB
11 192.168.110.133:5000/nginx 1.13 ae513a47849c 2 years ago 109 MB
12 docker.io/nginx 1.13 ae513a47849c 2 years ago 109 MB
13 registry.access.redhat.com/rhel7/pod-infrastructure latest 99965fb98423 2 years ago 209 MB
14 192.168.110.133:5000/pod-infrastructure latest 34d3450d733b 3 years ago 205 MB
15 [root@k8s-master ~]#
1 apiVersion: v1
2 kind: ReplicationController
3 metadata:
4 name: mysql
5 spec:
6 replicas: 1
7 selector:
8 app: mysql
9 template:
10 metadata:
11 labels:
12 app: mysql
13 spec:
14 containers:
15 - name: mysql
16 image: 192.168.110.133:5000/mysql:5.7.30
17 ports:
18 - containerPort: 3306
19 env:
20 - name: MYSQL_ROOT_PASSWORD # 数据库的环境变量,设置数据库的密码为123456
21 value: ‘123456‘
1 [root@k8s-master tomcat_demo]# kubectl describe pod mysql-xcth2
2 Name: mysql-xcth2
3 Namespace: default
4 Node: k8s-node3/192.168.110.135
5 Start Time: Wed, 17 Jun 2020 21:25:04 +0800
6 Labels: app=mysql
7 Status: Pending
8 IP: 172.16.32.2
9 Controllers: ReplicationController/mysql
10 Containers:
11 mysql:
12 Container ID:
13 Image: 192.168.110.133:5000/mysql:5.7.30
14 Image ID:
15 Port: 3306/TCP
16 State: Waiting
17 Reason: ErrImagePull
18 Ready: False
19 Restart Count: 0
20 Volume Mounts:
1 /usr/bin/docker-current: Error response from daemon: Conflict. The container name "/registry" is already in use by container a27987d97039c8596ad2a2150cee9e3fbe7580c8131e9f258aea8a922c22a237. You have to remove (or rename) that container to be able to reuse that name..
1 [root@k8s-master ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
2 /usr/bin/docker-current: Error response from daemon: Conflict. The container name "/registry" is already in use by container a27987d97039c8596ad2a2150cee9e3fbe7580c8131e9f258aea8a922c22a237. You have to remove (or rename) that container to be able to reuse that name..
3 See ‘/usr/bin/docker-current run --help‘.
4 [root@k8s-master ~]# docker ps -l
5 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6 a27987d97039 registry "/entrypoint.sh /e..." 11 days ago Exited (2) 9 days ago registry
7 [root@k8s-master ~]# docker rm a27987d97039
8 a27987d97039
9 [root@k8s-master ~]# docker ps -l
10 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11 ee95778bd5d9 busybox "sh" 12 days ago Exited (127) 12 days ago friendly_payne
12 [root@k8s-master ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
13 5e72b0961647003c757fd41ffe824027c857d1f3938b9a53535645f4f372a40a
14 [root@k8s-master ~]# docker ps
15 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16 5e72b0961647 registry "/entrypoint.sh /e..." 4 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp registry
17 [root@k8s-master ~]#
1 [root@k8s-master tomcat_demo]# docker tag docker.io/mysql:5.7.30 192.168.110.133:5000/mysql:5.7.30
2 [root@k8s-master tomcat_
文章标题:Kubernetes(k8s)的deployment资源
文章链接:http://soscw.com/index.php/essay/49830.html