- 第十一章 使用kubectl管理Kubernetes容器平台
- ping node1 上的tunl0的地址,也可以通的
- 11.5 kubectl其他常用命令和参数说明
- 这个命令在之前已经生成了。这里就不用执行了。
- 查看pod里指定容器的日志
- !!!Important Note!!!
- Requires that the ‘tar’ binary is present in your container #发现想要使用kubectl cp你的容器实例中必须有tar库"> Requires that the ‘tar’ binary is present in your container #发现想要使用kubectl cp你的容器实例中必须有tar库
- 11.6 kubectl维护k8s集群相关命令
Docker+K8S+DevOps微服务架构师
学神IT教育:从零基础到实战,从入门到精通!版权声明:
免责声明: 本课程设计目的只用于教学,切勿使用课程中的技术进行违法活动,学员利用课程中的技术进行违法活动,造成的后果与讲师本人及讲师所属机构无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
本系列文档为《学神IT教育》内部使用教材和教案,只允许VIP学员个人使用,禁止私自传播。否则将取消其VIP资格,追究其法律责任,请知晓!
联系方式:
学神IT教育官方网站: http://www.xuegod.cn
学神K8S精英学习11群QQ群: 957231097
微信扫码添加学习顾问微信,同时扫码关注学神公众号了解最新行业动态,获取更多学习资料及答疑就业服务!
第十一章 使用kubectl管理Kubernetes容器平台
本节所讲内容:
11.1 kubectl概述
11.2 kubectl创建和删除一个pod相关操作
11.3 yaml语法规则
11.4 kubectl create加载yaml文件生成deployment设备资源
11.5 kubectl其他常用命令和参数说明
11.6 使用kubectl管理集群中deployment资源和service服务
11.1 kubectl概述
kubectl是一个用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能。
实验环境说明:
使用之前已经安装好的kubernetes集群平台
1. 实验拓扑图当前集群构成如下:
环境说明(centos7.6):
IP 主机名 角色 内存
192.168.1.63 xuegod63 master 4G
192.168.1.62 xuegod62 worker 4G
192.168.1.64 xuegod64 worker 4G
[root@xuegod63 ~]# kubectl get nodes11.2 kubectl创建和删除一个pod相关操作
命令 | 说明 |
---|---|
run | 在集群上运行一个pod |
create | 使用文件或者标准输入的方式创建一个pod |
delete | 使用文件或者标准输入来删除某个pod |
11.2.1 在集群上运行一个镜像
提前将镜像docker.io-nginx.tar
上传到node1和node2上并导入镜像。
登录xuegod62,开始上传:
[root@xuegod62 ~]# scp docker.io-nginx.tar 192.168.1.64:/root/
如果node1和node2服务器上没有docker.io-nginx.tar镜像,后期使用时会自动从外网上下载此镜像,这样比较慢,所以我们提前上传到服务器上。
[root@xuegod62 ~]# docker load -i docker.io-nginx.tar
[root@xuegod64 ~]# docker load -i docker.io-nginx.tar
11.2.2 kubectl run 语法
kubectl run和docker run一样,kubectl run能将一个pod运行起来。
语法:
kubectl run podNAME —image=image [—env=”key=value”] [—port=port]
查看k8s平台,没有pod,是一个干净的平台,这样方便后期操作:
[root@xuegod63 ~]# kubectl get deployment
No resources found in default namespace.
[root@xuegod63 ~]# kubectl get pod
No resources found in default namespace.
例1:创建一个名字为nginx的pod,使用刚上传到node1和2上的nginx:latest镜像 ,—port=暴露容器端口 80 。
[root@xuegod63 ~]# kubectl run nginx —image=nginx:latest —image-pull-policy=’IfNotPresent’ —port=80
pod/nginx created
[root@xuegod63 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 7s
注:如果node结点上nginx:latest镜像没有,那么node1和node2会自动从docker镜像站点上下载。也可以改成自己的私有仓库地址:—image=192.168.1.63:5000/nginx:1.12。
—image-pull-policy=’IfNotPresent’ # 如果本地不存在镜像,那么才从外网下载镜像。 默认值为:imagePullPolicy: Always一直从外网,下载镜像,不用使用本地的。查看生成的pod,kubernetes将容器运行在pod中以方便实施卷和网络共享等管理
[root@xuegod63 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 117s
pods常见的状态:
ContainerCreating #容器创建
ImagePullBackOff #从后端把镜像拉取到本地
terminating [‘tɜ:mɪneɪtɪŋ] #终止 。当删除pod时的状态
- Running 正常运行状态
11.2.3 使用kubectl delete删除创建的对象
- 删除pod
语法:kubectl delete pod pod名字
[root@xuegod63 ~]# kubectl delete pod nginx
pod “nginx” deleted
[root@xuegod63 ~]# kubectl get pod
No resources found in default namespace.
11.3 yaml语法规则
YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。
- yaml配置文件常见单词:
- yaml语法的基本语法规则如下:
1、大小写敏感
2、使用缩进表示层级关系
3、缩进时不允许使用Tab键,只允许使用空格。
4、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
5、# 表示注释,从这个字符一直到行尾,都会被解析器忽略。
6、在yaml里面,连续的项目(如:数组元素、集合元素)通过减号“-”来表示,map结构里面的键值对(key/value)用冒号“:”来分割。
- YAML 支持的数据结构有三种
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值
- 数据结构—对象
对象的一组键值对,使用冒号结构表示。
例1:animal代表 pets # pet [pet] 宠物
animal: pets
例2:website网址对象中包括 baidu和qq, 且 baidu对象的值为:http://www.baidu.com,QQ对象的值为:http://www.qq.com 。这一句话,使用yaml语言,描述为:
website:
baidu: http://www.baidu.com
或写成一行:
website:{ baidu: http://www.baidu.com,qq: http://www.qq.com }
注:Yaml 也允许另一种写法,将所有键值对写成一个行内对象。
- 数组
一组连词线开头的行,构成一个数组。
animal:
Cat
Dog
Goldfish
转为 JavaScript 如下。
[ ‘Cat’, ‘Dog’, ‘Goldfish’ ]
数据结构的子成员是一个数组,则可以在该项下面缩进一个空格。数组中还有数组。
-
Cat
Dog
Goldfish
转为 JavaScript 如下。
[ [ ‘Cat’, ‘Dog’, ‘Goldfish’ ] ]
数组也可以采用行内表示法。
animal: [Cat, Dog]
转为 JavaScript 如下。
{ animal: [ ‘Cat’, ‘Dog’ ] }
- 复合结构
对象和数组可以结合使用,形成复合结构。
例:编写一个包括BAT基本信息的bat.yaml配置文件
bat:
website:baidu: http://www.baidu.com
ali:
- http://www.taobao.com - http://www.tmall.com ceo:RobinLi: 李彦宏
PonyMa: 马化腾
JackMa: 马云
注:格式如下
对象 :
对象:
对象:键值
数组:
- 数组成员
- 数组成员
- 纯量
纯量是最基本的、不可再分的值。如:字符串、布尔值、整数、浮点数、Null、时间、日期
例:数值直接以字面量的形式表示。
number: 11.30
11.4 kubectl create加载yaml文件生成deployment
使用kubectl run在设定很复杂的需求时,需要非常长的一条语句,也很容易出错,也没法保存。所以更多场景下会使用yaml或者json文件。
11.4.1 生成mysql-deployment.yaml 文件:
上传mysql服务器镜像docker.io-mysql-mysql-server.tar 到node1和node2上
11.4.2 使用mysql-deployment.yaml创建和删除mysql资源
[root@xuegod63 yamls]# kubectl create -f mysql-deployment.yaml
deployment “mysql” created
注:当一个目录下,有多个yaml文件的时候,使用kubectl create -f 目录 的方式一下全部创建
[root@xuegod63 tmp]# kubectl create -f yamls/
deployment “mysql” created
deployment “ mysql 1” created
扩展:
使用kubectl create 和 kubectl apply创建资源对象的区别kubectl apply -f FILENAME 可多次执行,每次修改YAML文件后,使用apply可直接部署
kubectl create -f FILENAME 不可多次执行,每次修改YAML后,需要先删除资源后才能部署
推荐使用apply部署资源对象,delete删除资源对象。
11.4.3 使用get参数查看pod详细信息:
[root@xuegod63 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-77596d4dcb-wrgmt 1/1 Running 0 55s
[root@xuegod63 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
mysql 1/1 1 1 44s
加上-o wide参数可以查看更详细的信息,比如看到此pod在哪个node上运行,此pod的集群IP是多少也被一并显示了
[root@xuegod63 ~]# kubectl get pod -o wide
注:10.122.78.73这个是pod的IP
测试:[root@xuegod63 ~]# ping 10.122.78.73 #可以ping通
[root@xuegod63 ~]# ip addr show tunl0
。。。
inet <font style="color:#FF0000;">10.122.78.64</font>/32 brd 10.122.78.64 scope global tunl0
ping node1 上的tunl0的地址,也可以通的
总结: master,node1,pod,docker,container 它们之间通信都是使用etcd分配的地址。也就是通过tunl0隧道把物理上分开的主机和容器,连接在一个局域网中了。
回顾:使用kubeadm初始化k8s集群
[root@xuegod63 ~]# kubeadm init —kubernetes-version=1.18.2 \
—apiserver-advertise-address=192.168.1.63 \
—image-repository registry.aliyuncs.com/google_containers \
—service-cidr=10.10.0.0/16 —pod-network-cidr=10.122.0.0/16
注:—kubernetes-version # 指定要安装的k8s版本
—pod-network-cidr # 指定pod网络地址范围 —service-cidr # 指定service网络地址范围 —apiserver-advertise-address #指定api地址,这里配置成了master的私网接口IP在node1查看运行mysql docker实例:
[root@xuegod62 ~]# docker ps | grep mysql
总结:get命令能够确认的信息类别:
deployments (缩写 deploy)
events (缩写 ev)
namespaces (缩写 ns)
nodes (缩写 no)
pods (缩写 po)
replicasets (缩写 rs)
replicationcontrollers (缩写 rc)
services (缩写 svc)
11.4.4 使用describe查看k8s中详细信息
describe [dɪˈskraɪb] 描述
语法: kubectl describe pod pod名字 语法: kubectl describe node node名字 语法: kubectl describe deployment deployment 名字 1. 使用describe查看pod的详细描述信息 [root@xuegod63 ~]# kubectl describe pod mysql-77596d4dcb-wrgmt 通过这个可以查看创建pod时报的错误信息,可以看到以下错误:11.5 kubectl其他常用命令和参数说明
命令 说明
logs 取得pod中容器的log信息
exec 在pod中执行一条命令、登录到pod
cp 从pod拷出或向pod拷入文件
attach Attach附加到一个运行中的pod上,实时查看pod消息
实验环境:先生成一个mysql资源:
[root@xuegod63 yamls]# kubectl apply -f /root /mysql-deployment.yaml
这个命令在之前已经生成了。这里就不用执行了。
11.5.1 kubectl logs
类似于docker logs,使用kubectl logs能够取出pod中镜像的log,也是故障排除时候的重要信息
[root@xuegod63 ~]# kubectl get pod
[root@xuegod63 yamls]# kubectl logs mysql-77596d4dcb-wrgmt
[Entrypoint] MySQL Docker Image 5.7.20-1.1.2
[Entrypoint] Initializing database
[Entrypoint] Database initialized
Warning: Unable to load ‘/usr/share/zoneinfo/iso3166.tab’ as time zone. Skipping it.
。。。
查看pod里指定容器的日志
[root@xuegod63 ~]# kubectl logs mysql-76f8866f79-98fw4 -c mysql
11.5.2 kubectl exec
exec命令用于到pod中执行一条命令,到mysql的镜像中执行cat /etc/my.cnf命令
[root@xuegod63 ~]# kubectl get pod
[root@xuegod63 ~]# kubectl exec mysql-77596d4dcb-wrgmt cat /etc/my.cnf
例2:使用参数exec -it ,直接登pod上中
[root@xuegod63 ~]# kubectl exec -it mysql-77596d4dcb-wrgmt bash
bash-4.2# exit
11.5.3 kubectl cp
用于从pod中拷出hosts文件到物理机的/tmp下
[root@xuegod63 ~]# kubectl cp mysql-77596d4dcb-wrgmt:/etc/hosts /tmp/hosts
command terminated with exit code 126 #报错
排错方法[root@xuegod63 ~]# kubectl cp —help
Copy files and directories to and from containers.
Examples:
!!!Important Note!!!
Requires that the ‘tar’ binary is present in your container #发现想要使用kubectl cp你的容器实例中必须有tar库
# image. If ‘tar’ is not present, ‘kubectl cp’ will fail. #如果镜像中tar命令不存在,那么kubectl cp将失败 安装mysql pod中安装tar命令: [root@xuegod63 ~]# kubectl exec -it mysql-77596d4dcb-wrgmt bash 创建阿里yum源,默认此镜像中带的是oracle的源,如果不能使用,就自己创建。 bash-4.2# mv /etc/yum.repos.d/public-yum-ol7.repo /opt/ bash-4.2# cat > /etc/yum.repos.d/CentOS-Base.repo <[root@xuegod63 ~]# kubectl cp mysql-77596d4dcb-wrgmt:/tmp/message.log message.log
tar: Removing leading `/‘ from member names
[root@xuegod63 ~]# cat message.log
this is a message from mysql-77596d4dcb-wrgmt
更改message.log并拷贝回pod
[root@xuegod63 ~]# echo “ I am mk!!!” >>message.log
[root@xuegod63 ~]# kubectl cp message.log mysql-77596d4dcb-wrgmt:/tmp/message.log
确认更改后的信息
[root@xuegod63 ~]# kubectl exec mysql-77596d4dcb-wrgmt cat /tmp/message.log
this is a message from mysql-77596d4dcb-wrgmt
I am mk!!!
11.5.4 kubectl attach
kubectl attach用于取得pod中容器的实时信息,可以持续不断实时的取出消息。像tail -f /var/log/messages 动态查看日志的作用。
kubectl logs是一次取出所有消息,像cat /etc/passwd
attach [əˈtætʃ] 贴上 附上[root@xuegod63 ~]# kubectl attach mysql-77596d4dcb-wrgmt
注: 到现在,所创建nginx和mysql都只是deployment设备硬件资源,并没有对应service服务,所以现在还不能直接在外网进行访问nginx和mysql服务。
11.6 kubectl维护k8s集群相关命令
实战环境:k8s集群中,发生了以下情况:有一个pod坏了,pod要镜像要升级,pod中nginx服务器的配置文件要修改,pod镜像要替换,要多起一个pod,node物理机要升级内存,不想在这个node物理机上运行新的pod等情况。怎么操作?
kubectl相关命令参数如下:
kubectl edit 编辑服务器侧资源
kubectl replace 替换,使用yaml配置文件来替换正在运行中的配置参数
kubectl patch 部分更新资源相关信息
kubectl apply 使用文件或者标准输入更改配置信息
kubectl scale 重新设定Deployment/ReplicaSet/RC/Job的size
kubectl autoscale Deployment/ReplicaSet/RC的自动扩展设定
kubectl cordon 设定node不可使用
kubectl uncordon 设定node可以使用
kubectl drain 设定node进入维护模式
11.6.1 创建资源文件
生成nginx-deployment.yaml资源和nginx-svc.yaml服务的配置文件
上传docker.io-nginx-php-fpm.tar并导入所有node:先上传到xuegod62上,再复制给xuegod64:
[root@xuegod62 ~]# scp docker.io-nginx-php-fpm.tar 192.168.1.64:/root
[root@xuegod62 ~]# docker load -i docker.io-nginx-php-fpm.tar
[root@xuegod64 ~]# docker load -i docker.io-nginx-php-fpm.tar
上传nginx-deployment.yaml资源和nginx-svc.yaml 到xuegod63上。11.6.2 查看并创建deployment和serveice
[root@xuegod63 ~]# kubectl get service #查看service
kubernetes ClusterIP 10.10.0.1
[root@xuegod63 ~]# kubectl create -f nginx-svc.yaml 查看创建的: pod、deployment、service [root@xuegod63 ~]# kubectl get pod -o wide #查看详细信息



方法2:
[root@xuegod63 ~]# echo xuegod63.xuegod.cn > index.html
[root@xuegod63 ~]# kubectl cp index.html nginx-6698f44dcc-k9sk9:/usr/share/nginx/html/index.html
访问: http://192.168.1.62:31001/
11.6.3 kubectl edit修改服务配置
1、kubectl get -o 格式化输出,-o 指定输出的消息为yaml类型
例1:以yaml类型查看nginx的service信息
[root@xuegod63 ~]# kubectl get service nginx -o yaml
2、edit这条命令用于编辑服务器上的资源。
例1:改端口31001 为31002
[root@xuegod63 ~]# kubectl edit service nginx
改: 46 - nodePort: 31001 为: 46 - nodePort: 31002 编辑之后确认结果发现,此服务端口已经改变 [root@xuegod63 ~]# kubectl get service NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 172.200.0.1
11.6.4 kubectl replace
replace就是替换,把nodeport端口改为31003
[root@xuegod63 ~]# kubectl get service nginx -o yaml > nginx_replace.yaml
[root@xuegod63 ~]# vim nginx_replace.yaml
改: 42 - nodePort: 31002
为: 42 - nodePort: 31003
注:不能直接改成31001
不然后:报错:
[root@xuegod63 ~]# kubectl replace -f nginx_replace.yaml The Service “nginx” is invalid: spec.ports[0].nodePort: Invalid value: 31001: provided port is already allocated执行replace命令
[root@xuegod63 ~]# kubectl replace -f nginx_replace.yaml
service “nginx” replaced
确认结果,确认之后发现port确实重新变成了31003
[root@xuegod63 ~]# kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 172.200.0.1
nginx 11.254.64.119
11.6.5 kubectl patch
当修改一部分设定时,使用patch很方便。比如:给pod换个image镜像。
patch [pætʃ] 补丁
查看当前port中使用的nginx镜像是否能解析php:
[root@xuegod63 ~]# kubectl exec -it nginx-6698f44dcc-k9sk9 bash
root@nginx-6698f44dcc-k9sk9:/# nginx -v
nginx version: nginx/1. 13.8
root@nginx-6698f44dcc-k9sk9:/# php #发现不支持php
bash: php: command not found
执行patch进行替换,替换成可以支持php的nginx docker镜像 上传docker.io-nginx-php-fpm.tar镜像到所有node上并导入。先传到node1上[root@xuegod63 ~]# kubectl patch pod nginx-6698f44dcc-k9sk9 -p ‘{“spec”:{“containers”:[{“name”:”nginx”,”image”:”richarvey/nginx-php-fpm:latest”}]}}’
“nginx-6698f44dcc-k9sk9” patched
排错经验:”image”:”richarvey/nginx-php-fpm:latest” 镜像名和双引号之间不能用空格,否则会显示:[root@xuegod63 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-6698f44dcc-k9sk9 0/1 InvalidImageName 1 1d
查看结果
[root@xuegod63 ~]# kubectl exec nginx-6698f44dcc-k9sk9 -it bash
bash-4.3# php -v
PHP 7.1.12 (cli) (built: Dec 1 2017 19:26:10) ( NTS )
测试访问:http://192.168.1.62:31003/index.php
11.6.6 kubectl apply
apply命令是用来使用文件或者标准输入来更改配置信息。
[root@xuegod63 ~]# vim nginx-svc.yaml
改:11 nodePort: 31001
为:11 nodePort: 31004
执行apply命令,执行设定文件可以在运行状态修改port信息
[root@xuegod63 ~]# kubectl apply -f nginx-svc.yaml
Warning: kubectl apply should be used on resource created by either kubectl create —save-config or kubectl apply
service/nginx configured
注:警告:kubectl apply应用于由kubectl create—save config或kubectl apply创建的资源
[root@xuegod63 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.10.0.1
nginx NodePort 10.10.233.171
已经改变。
11.6.7 kubectl scale
scale [skeɪl] 规模
scale命令用于横向扩展,是kubernetes或者swarm这类容器编辑平台的重要功能之一 实现环境: 之前已经设定nginx的replica副本为2。 查看nginx现在在哪个结点上运行: [root@xuegod63 ~]# kubectl get pod -o wide 执行scale命令,使用scale命令进行横向扩展,将原本为2的副本提高到3。相当于开3台nginx服务,来处理数据,瞬间提升了处理数据的能力。 [root@xuegod63 ~]# kubectl scale —current-replicas=2 —replicas=3 deployment/nginx deployment.apps/nginx scaled [root@xuegod63 ~]# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE mysql 1/1 1 1 86m nginx 3/3 3 3 23m [root@xuegod63 ~]# kubectl get pod NAME READY STATUS RESTARTS AGE mysql-77596d4dcb-wrgmt 1/1 Running 0 86m nginx-6698f44dcc-78kvb 1/1 Running 0 9s nginx-6698f44dcc-k9sk9 1/1 Running 1 23m nginx-6698f44dcc-wztbs 1/1 Running 0 9s [root@xuegod63 ~]# kubectl get pod -o wide # 查看pod都在哪些物理机上运行11.6.8 kubectl autoscale
autoscale命令用于自动扩展确认,scale需要手动执行,而autoscale则会根据负载进行调解。而这条命令则可以对Deployment进行设定,通过最小值和最大值的指定进行设定。
[root@xuegod63 ~]# kubectl autoscale deployment nginx —min=2 —max=5
horizontalpodautoscaler.autoscaling/nginx autoscaled
当然使用还会有一些限制,比如当前3个,设定最小和最大值为2的,会报以一下错误:
[root@xuegod63 ~]# kubectl autoscale deployment nginx —min=2 —max=2
Error from server (AlreadyExists): horizontalpodautoscalers.autoscaling “nginx” already exists
11.6.9 kubectl cordon 与 uncordon
cordon [ˈkɔ:dn] 封锁 警戒线
在实际维护的时候会出现某个node坏掉,或者做一些处理,暂时不能让生成的pod在此node上运行,需要通知kubernetes让其不要创建过来,这条命令就是cordon,uncordon则是取消这个要求。 之前横向扩展到3个副本,发现利用roundrobin策略,每个node上运行起来了一个pod,是平均分配的。 执行cordon命令 设定node2上不再运行新的pod实例,使用get node确认,其状态显示SchedulingDisabled。 [root@xuegod63 ~]# kubectl cordon xuegod64.cn node/xuegod64.cn cordoned [root@xuegod63 ~]# kubectl get nodes -o wide11.6.10 kubectl drain
kubectl drain命令 [dreɪn] 排水
用于对某个node结点进行维护。
drain两个作用:
设定此node不可以使用(cordon)
evict驱逐pod到他正常的node节点上
事前准备,删除没有用的deploy,节约点硬件资源
[root@xuegod63 ~]# kubectl delete deployment nginx #删除之前的nginx部署
[root@xuegod63 ~]# kubectl delete deployment mysql #删除之前的mysql部署
例:将nginx的副本由2个设定为4,发现node1和node2各启动了两个pod。
[root@xuegod63 ~]# kubectl create -f /root/nginx-deployment.yaml
[root@xuegod63 ~]# kubectl scale —replicas=4 deployment nginx
deployment “nginx” scaled
[root@xuegod63 ~]# kubectl get pod -o wide
执行drain命令,让node1不可用,并把node1上已经运行pod驱逐到其他node上:
[root@xuegod63 ~]# kubectl drain xuegod62.cn —ignore-daemonsets
注:—ignore-daemonsets —忽略守护进程
node/xuegod62.cn already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-gv8rz, kube-system/kube-proxy-l77c8
evicting pod default/nginx-6698f44dcc-nc8dl
evicting pod default/nginx-6698f44dcc-vs7rc
pod/nginx-6698f44dcc-vs7rc evicted
pod/nginx-6698f44dcc-nc8dl evicted
node/xuegod62.cn evicted
结果确认
把node2上的pod删除后,k8s会根据replicas的机制,在清退pod和设定node时,在其他结点上生成新的pod。这时就可以对node2节点进行维护了,维护好后,重新uncordon即可。
[root@xuegod63 ~]# kubectl get pod -o wide
[root@xuegod63 ~]# kubectl get nodes -o wide
等修复好结点后,现在恢复可用:
[root@xuegod63 ~]# kubectl uncordon xuegod62.cn
总结:
11.1 kubectl概述
11.2 kubectl创建和删除一个pod相关操作
11.3 yaml语法规则
11.4 kubectl create加载yaml文件生成deployment设备资源
11.5 kubectl其他常用命令和参数说明
11.6 使用kubectl管理集群中deployment资源和service服务