KUBERNETES03_命名空间Pod是什么Deployment多副本能力扩缩容自愈或故障转移滚动更新版本回退
Posted 所得皆惊喜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KUBERNETES03_命名空间Pod是什么Deployment多副本能力扩缩容自愈或故障转移滚动更新版本回退相关的知识,希望对你有一定的参考价值。
文章目录
①. 资源创建方式
-
①. 命令行(比如创建一个命名空间为TANG:kubectl create ns TANG)
-
②. YAML
apiVersion: v1
kind: Namespace
metadata:
name: TANG
②. 命名空间Namespace
-
①. Namespace:名称空间,用来对集群资源进行隔离划分。默认只隔离资源,不隔离网络
-
②. 关于Namespace中基本的命令
kubectl get ns:查看命名空间
kubectl create ns hello:创建命名空间
kubectl delete ns hello:删除命名空间 -
③. 使用yaml的文件创建命名空间(下面创建了hello的命名空间),hello.yaml
如果要删除命名空间:kubectl delete -f hello.yaml
apiVersion: v1
kind: Namespace
metadata:
name: hello
- ④. 使用kubectl get pods:查看的是默认(default命名空间)下的内容
[root@k8s-master~]kubectl get pods
No resources found in default namespace
③. Pod
①. Pod的概念
- ①. 运行中的一组容器,Pod是kubernetes中应用的最小单位
②. 使用命令行的形式创建pod
-
①. 使用命令行的形式创建pod(如kubectl run mynginx–image=nginx)
-
②. kubectl run mynginx --image=nginx
-
③. 查看default名称空间的Pod:kubectl get pod
-
④. 描述:kubectl describe pod 你自己的Pod名字
-
⑤. 删除:kubectl delete pod Pod名字
-
⑥. 查看Pod的运行日志:kubectl logs Pod名字 h或者 kubectl logs -f Pod名字
-
⑦. 每个Pod - k8s都会分配一个ip:kubectl get pod -owide (-o wide)
-
⑧. 集群中的任意一个机器以及任意的应用都能通过Pod分配的ip来访问这个Pod,部署在pod中的应用,不能通过浏览器的方式进行访问
# 我们在master节点运行
[root@k8smaster ~]# kubectl run mynginx --image=nginx
pod/mynginx created
# 这里会将创建的pod默认在default命名空间下
[root@k8smaster ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mynginx 0/1 ContainerCreating 0 14s
[root@k8smaster ~]# kubectl describe pod mynginx
# 在node2节点可以看到运行的mynginx和nginx镜像
[root@k8snode2 ~]# docker ps |grep mynginx
8596f8e18360 nginx "/docker-entrypoint.…" 3 minutes ago Up 3 minutes k8s_mynginx_mynginx_default_e3a3add5-2a0a-4af4-bcdb-719e8c1ff231_0
774584bc088f registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/pause:3.2 "/pause" 4 minutes ago Up 4 minutes k8s_POD_mynginx_default_e3a3add5-2a0a-4af4-bcdb-719e8c1ff231_0
[root@k8snode2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ea335eea17ab 11 days ago 141MB
# 查看Pod的运行日志
kubectl logs Pod名字
# 每个Pod - k8s都会分配一个ip
kubectl get pod -owide
# 使用Pod的ip+pod里面运行容器的端口
curl 192.168.169.136
[root@k8smaster ~]# kubectl get pods -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mynginx 1/1 Running 0 21m 11.168.185.196 k8snode2 <none> <none>
[root@k8smaster ~]# curl 11.168.185.196
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html color-scheme: light dark;
body width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@k8smaster ~]# kubectl logs -f mynginx
2021/11/28 12:54:19 [notice] 1#1: start worker process 38
2021/11/28 12:54:19 [notice] 1#1: start worker process 39
11.168.16.128 - - [28/Nov/2021:13:14:56 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
# 如何进入到mynginx容器
[root@k8smaster ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mynginx 1/1 Running 0 15m
[root@k8smaster ~]# kubectl exec -it mynginx -- /bin/bash
root@mynginx:/# cd /usr/share/nginx/html/
root@mynginx:/usr/share/nginx/html# ls
50x.html index.html
root@mynginx:/usr/share/nginx/html# echo "hello tang"->index.html
root@mynginx:/usr/share/nginx/html#
[root@k8smaster ~]# kubectl get pod mynginx -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mynginx 1/1 Running 0 16m 11.168.185.197 k8snode2 <none> <none>
[root@k8smaster ~]# curl 11.168.185.197
hello tang-
③. yaml文件的形式创建pod
apiVersion: v1
kind: Pod
metadata:
labels:
run: mynginx
name: mynginx
# namespace: default
spec:
containers:
- image: nginx
name: mynginx
④. 使用图形化界面创建pod
⑤. 多容器pod细节
- ①. kubectl apply -f tomcatandnginx.yaml
如果在同一个pod里面nginx要访问tomcat,只需要进入到nginx的容器内,通过localhost的方式就能进行访问
如果在同一个pod里面tomcat要访问nginx,只需要进入到tomcat的容器内,通过localhost的方式就能进行访问
apiVersion: v1
kind: Pod
metadata:
labels:
run: myapp
name: myapp
spec:
containers:
- image: nginx
name: nginx
- image: tomcat:8.5.68
name: tomcat
- ②. 同一个pod里面不能同时启动两个nginx或者redis等
④. Deployment多副本能力
- ①. 控制Pod,使Pod拥有多副本,自愈,扩缩容等能力
- 如果我们使用deployment去创建,那么如果我们使用delete删除后,它底层会删掉这个旧的重新启动一个新的出来,这里我们就可以体会到它的自愈能力
如果我们使用kubectl run mynginx --image=nginx,使用delete命令删除后就真的删除了 - 查看deployment:kubectl get deploy
- 删除deployment:kubectl delete deploy 你的名字
# 清除所有Pod,比较下面两个命令有何不同效果?
kubectl run mynginx --image=nginx
kubectl create deployment mytomcat --image=tomcat:8.5.68
# 自愈能力
-
②. 多副本命令行方式:kubectl create deployment my-dep --image=nginx --replicas=3
-
③. 多副本可视化创建deployment
- ④. 多副本yaml文件创建方式
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: my-dep
name: my-dep
spec:
replicas: 3
selector:
matchLabels:
app: my-dep
template:
metadata:
labels:
app: my-dep
spec:
containers:
- image: nginx
name: nginx
⑤. Deployment扩缩容
- ①. 扩容缩容的命令:kubectl scale
# 假设现在my-dep只有3个pod
kubectl scale --replicas=5 deployment/my-dep
# 缩容(修改 replicas)
# 下面这种方式会打开一个配置文件
kubectl edit deployment my-dep
- ②. 可以在可视化界面进行扩缩容能力
⑥. Deployment:自愈或故障转移
-
①. 停机(停机之后自愈能力是指停机后Deploy会让这个停机的容器又尝试重启)
-
②. 删除pod、容器宕机(现在有master、node1、node2,如果node1机器直接宕机了,经过一段时间,原来在node1上的pod会转移到node2节点上)
⑦. Deployment:滚动更新
- ①. 滚动更新:如下图的v1想转换到v2,这个时候会尝试启动第使用v2的第一个pod,只有当v2的第一个pod起作用后,会替换掉v1的第一个pod,然后一次更新第二个v1的pod,会存在v1、v2两个版本并存的情况
- ②. 使用命令的方式实现滚动更新
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record(注意这里的nginx=nginx:1.16.1第一个nginx需要通过命令 kubectl get deploy my-dep-01 -oyaml查看到)
# 实时的去监控
[root@k8smaster ~]# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
my-dep-01-686cfb7bf-8hwp8 1/1 Running 1 11h
my-dep-01-686cfb7bf-9g2ws 1/1 Running 1 11h
my-dep-01-686cfb7bf-9jz5m 1/1 Running 1 11h
my-dep-01-686cfb7bf-b54z6 1/1 Running 1 11h
my-dep-01-686cfb7bf-xhvjz 1/1 Running 1 11h
# 使用如下命令后,会出现下图的效果
[root@k8smaster ~]# kubectl get deploy my-dep-01 -0yaml
- ③. 更新好之后,使用如下命令监控可以看到已经进行了替换
# 通过命令我们已经发生了滚动更新,将nginx:laster的版本更新到了nginx:1.16.1
[root@k8smaster ~]# kubectl get deploy my-dep-01 -oyaml |grep nginx
kubernetes.io/change-cause: kubectl set image deployment/my-dep-01 my-dep-01=nginx:1.16.1
- image: nginx:1.16.1
⑧. Deployment:版本回退
- ①. 通过kubectl rollout history deployment/my-dep-01查看之前的历史,2这个版本我们将nginx改为了1.16.1的版本,然后我们使用命令进行回退,又将1.16.1的版本改为了latest
[root@k8smaster ~]# kubectl rollout history deployment/my-dep-01
deployment.apps/my-dep-01
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image deployment/my-dep-01 my-dep-01=nginx:1.16.1 --record=true
[root@k8smaster ~]# kubectl rollout undo deployment/my-dep-01 --to-revision=1
deployment.apps/my-dep-01 rolled back
[root@k8smaster ~]# kubectl get deploy my-dep-01 -oyaml |grep nginx
- image: nginx
- ②. 版本回退常用命令
#历史记录
kubectl rollout history deployment/my-dep
#查看某个历史详情
kubectl rollout history deployment/my-dep --revision=2
#回滚(回到上次)
kubectl rollout undo deployment/my-dep
#回滚(回到指定版本)
kubectl rollout undo deployment/my-dep --to-revision=2
⑨. 其他工作负载
-
①. Deployment:无状态应用部署,比如微服务,提供多副本等功能
-
②. StatefulSet: 有状态应用部署,比如redis,提供稳定的存储、网络等功能
-
③. DaemonSet: 守护型应用部署,比如日志收集组件,在每个机器都运行一份
-
④. Job/CronJob:定时任务部署, 比如垃圾清理组件,可以在指定时间运行
以上是关于KUBERNETES03_命名空间Pod是什么Deployment多副本能力扩缩容自愈或故障转移滚动更新版本回退的主要内容,如果未能解决你的问题,请参考以下文章
KUBERNETES03_k8s对象是什么如何管理命名空间代码自动补全提示
KUBERNETES03_k8s对象是什么如何管理命名空间代码自动补全提示