提前将镜像 docker.io-nginx.tar 和 pod-infrastructure.tar
docker load -i docker.io-mysql-mysql-server.tar
yaml 语法规则
YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。
1. pod 资源 yaml 配置文件常见单词:
kind: 同类,类型 ;
apiVersion API版本 ;
metadata 元数据 ;
spec: 规格,说明书(定义具体参数) ;
replicas [ˈreplɪkəs] : 副本
selector [sɪˈlektə(r)] 选择器 ;
template [ˈtempleɪt] 模板
2. yaml 语法的基本语法规则如下:
1、大小写敏感
2、使用缩进表示层级关系
3、缩进时不允许使用 Tab 键,只允许使用空格。
4、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 5、# 表示注释,从这个字符一直到行尾,都会被解析器忽略。
3. YAML 支持的数据结构有三种
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值
4. 数据结构--对象
对象的一组键值对,使用冒号结构表示。
例1:animal代表 pets # pet [pet] 宠物
animal: pets
Yaml 也允许另一种写法,将所有键值对写成一个行内对象。
2:website网址对象中包括 baidu和qq, 且 baidu对象的值为:http://www.baidu.com,QQ对象的值为:http://www.qq.com 。这一句话,使用yaml语言,描述为:
website:
baidu: http://www.baidu.com
qq: http://www.qq.com
或写成一行:
website:{ baidu: http://www.baidu.com,qq: http://www.qq.com }
5. 数组
一组连词线开头的行,构成一个数组。
animal:
- Cat
- Dog
- Goldfish
转为 JavaScript 如下。
[ 'Cat', 'Dog', 'Goldfish' ]
数据结构的子成员是一个数组,则可以在该项下面缩进一个空格。数组中还有数组。
-
- Cat
- Dog
- Goldfish
转为 JavaScript 如下。
[ [ 'Cat', 'Dog', 'Goldfish' ] ]
数组也可以采用行内表示法。
animal: [Cat, Dog]
转为 JavaScript 如下。
{ animal: [ 'Cat', 'Dog' ] }
6. 复合结构
对象和数组可以结合使用,形成复合结构。
例:编写一个包括BAT基本信息的bat.yaml配置文件
bat:
website:
baidu: http://www.baidu.com
qq: http://www.qq.com
ali:
- http://www.taobao.com
- http://www.tmall.com
ceo:
RobinLi: 李彦宏
PonyMa: 马化腾
JackMa: 马云
注:格式如下
对象 :
对象:
对象:键值
数组:
- 数组成员
- 数组成员
7. 纯量
纯量是最基本的、不可再分的值。如:字符串、布尔值、整数、浮点数、Null、时间、日期
例:数值直接以字面量的形式表示。
number: 11.30
vim mysql-deployment.yaml #查看内容
apiVersion: apps/v1
kind: Deployment #deployment的名称,全局唯一
metadata:
name: mysql
namespace: default
labels:
k8s-app: mysql
spec:
selector:
matchLabels:
k8s-app: mysql
replicas: 1 #Pod 副本期待数量,1代表运行一个pod
template:
metadata:
labels:
k8s-app: mysql
spec:
containers: #pod中容器定义的部分
- name: mysql #容器名称
image: docker.io/mysql/mysql-server #容器对应的image镜像
imagePullPolicy: IfNotPresent #默认值为:imagePullPolicy: Always 一直从外网,下载镜像,不使用本地的镜像。
ports:
- containerPort: 3306
protocol: TCP
env: #注入到容器到环境变量
- name: MYSQL_ROOT_PASSSWORD #设置mysql root密码
value: "hello123"
使用 mysql-deployment.yaml 创建和删除 mysql 资源
kubectl apply -f mysql-deployment.yaml
注:当一个目录下,有多个 yaml 文件的时候,使用 kubectl apply -f 目录 的方式一下全部创建
kubectl apply -f yamls/
ip addr show tunl0
link/ipip 0.0.0.0 brd 0.0.0.0
inet 10.244.194.128/32 scope global tunl0
inet 10.244.194.128/32 brd 10.122.78.64 scope global tunl0
总结: master,node1,pod,docker,container 它们之间通信都是使用etcd分配的地址。也就是通过tunl0隧道把物理上分开的主机和容器,连接在一个局域网中了。
使用kubeadm初始化k8s集群
# kubeadm init --kubernetes-version=1.20.4 \
--apiserver-advertise-address=192.168.40.130 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16
注:--kubernetes-version # 指定要安装的k8s版本
--pod-network-cidr # 指定pod网络地址范围
--service-cidr # 指定service网络地址范围
--apiserver-advertise-address #指定api地址,这里配置成了master的私网接口IP
docker ps | grep mysql
get 命令能够确认的信息类别:
deployments (缩写 deploy)
namespaces (缩写 ns)
nodes (缩写 no)
pods (缩写 po)
replicasets (缩写 rs)
services (缩写 svc)
使用 describe 查看 k8s 中详细信息 describe [dɪˈskraɪb] 描述
语法: kubectl describe pod pod 名字
语法: kubectl describe node node 名字
语法: kubectl describe deployment deployment 名字
1. 使用 describe 查看 pod 的详细描述信息
kubectl describe pod mysql-76f8866f79-j6twz
2. 使用 describe 查看 node 的详细描述信息
kubectl describe node god62 #查看详细信息
3. 使用 describe 查看 deployment 的详细描述信息
kubectl describe deployment mysql
kubectl 其他常用命令和参数说明
命令 说明
logs 取得pod中容器的log信息
exec 在pod中执行一条命令
cp 从pod拷出或向pod拷入文件
attach Attach附加到一个运行中的pod上,实时查看pod消息
实验环境:先生成一个mysql资源:
# kubectl apply -f /root /mysql-deployment.yaml
#这个命令在之前已经生成了。这里就不用执行了。
kubectl logs
类似于docker logs,使用kubectl logs能够取出pod中镜像的log,也是故障排除时候的重要信息
# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-76f8866f79-j6twz 1/1 Running 0 5m50s
# kubectl logs mysql-76f8866f79-j6twz
[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.
kubectl exec
exec
命令用于到 pod 中执行一条命令,到 mysql 的镜像中执行 cat /etc/my.cnf 命令
# kubectl get pod
# kubectl exec mysql-76f8866f79-j6twz cat /etc/my.cnf
2:使用参数 exec -it ,直接登 pod 上中
# kubectl exec -it mysql-76f8866f79-j6twz bash
bash-4.2# exit
kubectl exec -it mysql-64bc8ff79d-hw4v5 -c mysql bash
#-c 指定进入到 pod 具体容器里
kubectl cp. 用于从 pod 中拷出 hosts 文件到物理机的/tmp 下
kubectl cp mysql-64bc8ff79d-hw4v5:/etc/hosts /tmp/hosts
command terminated with exit code 126. #报错
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 命令:
kubectl exec -it mysql-64bc8ff79d-hw4v5 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 <
[base]
name=CentOS7
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
gpgcheck=0
EOF
bash-4.2# yum install tar -y
在 pod 中创建一个文件 message.log
bash-4.2# echo "this is a message from god.cn" > /tmp/message.log
bash-4.2# exit
拷贝出来并确认
kubectl cp mysql-64bc8ff79d-hw4v5:/tmp/message.log /tmp/message.log
cat /tmp/message.log
this is a message from god.cn
#更改 message.log 并拷贝回 pod
echo " I am pod!!" >>/tmp/message.log
kubectl cp /tmp/message.log mysql-64bc8ff79d-hw4v5:/tmp/message.log
确认更改后的信息
kubectl exec -it mysql-64bc8ff79d-hw4v5 bash
cat /tmp/message.log
kubectl attach 用于取得 pod 中容器的实时信息,可以直接查看容器中以 daemon 形式运行的进程输出,
可以持续不断实时的取出消息。像 tail -f /var/log/messages 动态查看日志的作用。 kubectl logs 是一次取出所有消息,像 cat /etc/passwd
attach [əˈtætʃ] 贴上、附上
# kubectl attach kube-apiserver-god63 -n kube-system
使用kubectl管理集群
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进入维护模式
创建资源文件
生成nginx-deployment.yaml资源和nginx-svc.yaml服务的配置文件
上传docker.io-nginx-php-fpm.tar并导入到工作节点上
docker load -i docker.io-nginx-php-fpm.tar
cat nginx-deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: nginx
namespace: default
labels:
k8s-app: nginx
spec:
selector:
matchLabels:
k8s-app: nginx
replicas: 2 # 创建2个pod
template:
metadata:
labels:
k8s-app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
protocol: TCP
vim nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
k8s-app: nginx
spec:
type: NodePort
ports:
- protocol: TCP
nodePort: 31001
targetPort: 80
port: 3000
selector:
k8s-app: nginx
nodePort: 31001 #指定是 node 物理机上监控听的端口,后期公网上的机器,可以访问此端口。 targetPort: 80 #nginx pod 的端口号,也就是真正 docker 监听的端口号
port: 3000 #service 服务端口号 、service 集群 IP 监听的端口,K8S 内部各个 service 服务,
使用这个端口号进行通信
kubectl apply -f nginx-svc.yaml
kubectl apply -f nginx-deployment.yaml
查看并创建 deployment 和 serveice
查看创建的: pod、deployment、service
kubectl get pods -o wide
kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-64bc8ff79d-hw4v5 1/1 Running 0 17h
nginx-946d5bbbf-64n9w 1/1 Running 0 19m
nginx-946d5bbbf-sxbfr 1/1 Running 0 19m
kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
mysql 1/1 1 1 17h
nginx 2/2 2 2 19m
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1
nginx NodePort 10.105.245.139
现nginx容器中的80端口已经映射到node物理机节点的31001端口上了
。可以查看到nginx服务已经运行在god62和god64上了。
http://192.168.172.164:31001/ ,http://192.168.172.162 都可以访问的。
修改一下默认主页:
kubectl exec -it nginx-946d5bbbf-64n9w bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx-946d5bbbf-64n9w:/# cd /usr/share/nginx/html/
root@nginx-946d5bbbf-64n9w:/usr/share/nginx/html# echo i am pod > index.html
方法 2:
# echo god63.god.cn > index.html
kubectl cp index.html nginx-946d5bbbf-sxbfr:/usr/share/nginx/html/index.html
kubectl edit 修改服务配置
1、kubectl get -o 格式化输出,-o 指定输出的消息为yaml类型
例1:以yaml类型查看nginx的service信息
# kubectl get service nginx -o yaml
2、edit这条命令用于编辑服务器上的资源。
1:改端口31001 为31002
# kubectl edit service nginx
改: 46 - nodePort: 31001
为: 46 - nodePort: 31002
编辑之后确认结果发现,此服务端口已经改变
#
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1
nginx NodePort 10.105.245.139
修改后,发现可以通过http://192.168.172.162:31002/
正常访问
注:edit编辑修改配置文件时,不需要停止服务。改完后立即生效
kubectl replace
replace就是替换,把nodeport端口改为31003
kubectl get service nginx -o yaml > nginx_replace.yaml
vim nginx_replace.yaml
改:- nodePort: 31002
为:- nodePort: 31003
kubectl replace -f nginx_replace.yaml
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1
nginx NodePort 10.105.245.139
kubectl patch
当修改一部分设定时,使用 patch 很方便。比如:给 pod 换个 image 镜像。 patch [pætʃ] 补丁
查看当前
port 中使用的 nginx 镜像是否能解析 php:
kubectl exec -it nginx-946d5bbbf-64n9w bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx-946d5bbbf-64n9w:/# nginx -v
nginx version: nginx/1.13.8
root@nginx-946d5bbbf-64n9w:/# php
bash: php: command not found #不支持php
执行 patch 进行替换,替换成可以支持 php 的 nginx docker 镜像
docker load -i docker.io-nginx-php-fpm.tar
替换景象
kubectl patch pod nginx-946d5bbbf-64n9w -p
'{"spec":{"containers":[{"name":"nginx","image":"richarvey/nginx-php-fpm:latest"}]}}'
查看结果
kubectl exec nginx-946d5bbbf-64n9w -it bash
php -v
PHP 7.1.12 (cli) (built: Dec 1 2017 19:26:10) ( NTS )
kubectl apply
apply 命令是用来使用文件或者标准输入来更改配置信息。
vim nginx-svc.yaml
改:11 nodePort: 31001
为:11 nodePort: 31004
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
k8s-app: nginx
spec:
type: NodePort
ports:
- protocol: TCP
nodePort: 31004
targetPort: 80
port: 3000
selector:
k8s-app: nginx
执行 apply 命令,执行设定文件可以在运行状态修改 port 信息
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 创建的资源
get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1
nginx NodePort 10.105.245.139
kubectl scale
scale [skeɪl] 规模
scale 命令用于横向扩展,是 kubernetes 或者 swarm 这类容器编辑平台的重要功能之一 实验环境: 之前已经设定 nginx 的 replica 副本为 2。
查看
nginx 现在在哪个结点上运行:
执行 scale 命令,使用 scale 命令进行横向扩展,将原本为 2 的副本提高到 3。相当于开 3 台 nginx 服务, 来处理数据,瞬间提升 3 倍的处理数据的能力。
kubectl scale --current-replicas=2 --replicas=3 deployment/nginx deployment.apps/nginx scaled
kubectl get deploy 就会有3个
kubectl autoscale
autoscale 命令用于自动扩展确认,scale 需要手动执行,而 autoscale 则会根据负载进行调解。而这条命令则可以对 Deployment 进行设定,通过最小值和最大值的指定进行设定。
kubectl autoscale deployment nginx --min=2 --max=5 horizontalpodautoscaler.autoscaling/nginx autoscaled
当然使用还会有一些限制,比如当前 3 个,设定最小和最大值为 2 的,会报以一下错误:
# kubectl autoscale deployment nginx --min=2 --max=2
Error from server (AlreadyExists): horizontalpodautoscalers.autoscaling "nginx" already exists
kubectl cordon 与 uncordon
cordon [ˈkɔ:dn] 封锁 警戒线
在实际维护的时候会出现某个
node 坏掉,或者做一些处理,暂时不能让生成的 pod 在此 node 上运行,需要通知 kubernetes 让其不要创建过来,这条命令就是 cordon,uncordon 则是取消这个要求。
之前横向扩展到 3 个副本,发现利用 roundrobin 策略,每个 node 上运行起来了一个 pod,是平均分配的。
执行 cordon 命令
设定 god64 上不再运行新的 pod 实例,使用 get node 确认,其状态显示 SchedulingDisabled。
# kubectl cordon god64
kubectl get nodes -o wide
执行 scale 命令,再次执行横向扩展命令,看是否会有 pod 漂到 god64 这台机器上,结果发现只有之 前的一个 pod,再没有新的 pod 漂过去。
kubectl scale --replicas=6 deployment/nginx
deployment.apps/nginx scaled
kubectl get pod -o wide
注:发现新扩展的 pod 都在 god62 运行了,没有在 god64 上运行,说明封锁 god64 成功 了。另外,我们指定扩展到 6 个 pod,但是只运行了 5 个,因为前面执行 autoscale 时,指定最多可以扩展到 5 个。
执行 uncordon 解除封锁命令
使用 uncordon 命令解除对 god64 机器的限制,通过 get node 确认状态也已经正常。
执行 scale 命令
再次执行 scale 命令,发现有新的 pod 可以创建到 god64 上了
kubectl scale --replicas=7 deployment nginx
kubectl drain
kubectl drain 命令 [dreɪn] 排水
用于对某个 node 结点进行维护。
drain 两个作用:
1. 设定此 node 不可以使用(cordon)
2. evict
驱逐 pod 到他正常的 node 节点上
evict [ɪˈvɪkt] 驱逐
事前准备,删除没有用的 deploy,节约点硬件资源
kubectl delete deployment nginx #删除之前的 nginx部署
kubectl delete deployment mysql #删除之前的 mysql 部署
将 nginx 的副本设定为 4,发现 god64 和 god62 各启动了两个 pod。
kubectl create -f /root/nginx-deployment.yaml
kubectl scale --replicas=4 deployment nginx
kubectl get pod -o wide
执行 drain 命令,让 god62 不可用,并把 god62 上已经运行 pod 驱逐到其他 node 上:
kubectl drain god62 --ignore-daemonsets 注:--ignore-daemonsets --忽略守护进程
结果确认
把 god62 上的 pod 删除后,k8s 会根据 replicas 的机制,在清退 pod 和设定 node 时,在其他结点 上生成新的 pod。这时就可以对 god62 节点进行维护了,维护好后,重新 uncordon 即可。
等修复好结点后,现在恢复可用: undo
kubectl uncordon god62.cn
kubectl label
pod 资源标签使用技巧
在 k8s 之上,每一种资源都可以有一个标签,现实中用到的 pod 数量可能越来越多,我们期望能够分类进行 管理,最简单和直接的效果就是把 pod 分成很多不同的小组,无论对于开发还是运维来讲都能显著提高管理效 率,更何况我们控制器,我们 service 资源也需要使用标签来识别它们所管控或关联到的资源,当我们给 pod 或 者任何资源设定标签时,都可以使用标签查看,删除等对其执行相应的管理操作;
简单来说所谓的标签就是附加在我们所对应的对象之上的键值对,一个资源之上可以存在多个标签,每个标 签都是键值对,而且每个标签都可以被标签选择器进行匹配度检查从而完成资源挑选,通常情况下一个资源对象 可使用多个标签,反之,一个标签也可以被添加到多个资源对像上;标签既可以在资源对象创建的时候指定,也 可以在资源对象创建之后使用命令来进行管理,这个管理既包括添加,也包括删除,还包括修改;实践中我们通 常给资源附加不同维度的标签,来进行不同维度的管理,比方说 labels 下面的标签 app: myapp 用来指明当前 的应用程序(可能是 nginx,tomcat,http,mysql,redis 等)是什么,我们也可以分层打标签,如前端 frontend,后端 backend,开发环境 dev 等;也可以对版本打标签。
labels:
app: myapp
tier: frontend
标签:
key: value (key 和 value 最多 63 个字符,key 只能使用字母,数字,下划线组成,只能以字母或数字开头,不能为空值;value 可以为空,也是只能以字母或数字开头和结尾,中间可使用字母,数字,下划线) 我们在查看 pod 或任何类型资源时,也可以直接指定标签选择器来选择能显示哪些标签的
cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat-pod
namespace: default
labels:
app: tomcat-pod
spec:
containers:
- name: tomcat-pod-java
ports:
- containerPort: 8080
image: tomcat:8.5-jre8-alpine
imagePullPolicy: IfNotPresent
通过 Pod 创建一个 nginx 服务:
vim nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-nginx
namespace: default
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
ports:
- containerPort: 80
image: nginx
imagePullPolicy: IfNotPresent
kubectl apply -f nginx.yaml
kubectl get pods | grep nginx
查看所有 pod 资源对象的标签
kubectl get pods --show-labels
my-nginx 1/1 Running 0 51s run=my-nginx
tomcat-pod 1/1 Running 0 7m20s app=tomcat-pod
查看所有资源对象下拥有 run 这个标签的标签值
kubectl get pods -L run
my-nginx 1/1 Running 0 2m17s my-nginx
tomcat-pod 1/1 Running 0 8m46s
kubectl get pods -l run
my-nginx 1/1 Running 0 3m11s
查看拥有 run 这个标签的资源对象,并且把标签显示出来
# kubectl get pods -l run --show-labels
my-nginx 1/1 Running 0 7m26s run=my-nginx
想修改资源的标签,比方说想给 my-nginx 加上个 release 标签
给资源对象打标签要使用 label 命令,指定给某个类型下的某个资源打标签,key/value 可以是多个,因此 在 my-nginx 这个资源下再打个标签 release,用如下命令
kubectl label pods my-nginx release=canary
查看标签是否打成功:
kubectl get pods -l release --show-labels
my-nginx 1/1 Running 0 8m16s release=canary,run=my-nginx
修改标签,把 release=canary 改成 release=stable
kubectl label pods my-nginx release=stable11 --overwrite
查看标签,显示如下:
kubectl get pods -l release --show-labels
my-nginx 1/1 Running 0 6m20s release=stable11,run=my-nginx
查看既有 release 标签,又有 run 标签的 pod 资源有哪些
kubectl get pods -l release,run
NAME READY STATUS RESTARTS AGE
my-nginx 1/1 Running 0 7m
能使用标签的不只是 pod,node 节点也可以打标签:
查看 nodes 节点的标签
kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master1 Ready master 15d v1.20.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,ku bernetes.io/hostname=master1,kubernetes.io/os=linux,node-role.kubernetes.io/master= node1 Ready 15d v1.20.4 a=b,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd6 4,kubernetes.io/hostname=node1,kubernetes.io/os=linux
给 node 节点打标签
kubectl label nodes god62 xuexi=jianchi
查看
kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
god62 Ready,SchedulingDisabled
kubectl label pods my-nginx aa=bb
#删除 aa=bb 标签
kubectl get pods --show-labels
kubectl label pods my-nginx aa-
kubectl 自动补全
1:安装 bash-completion:
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
2:应用 kubectl 的 completion 到系统环境:
使用效果:
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
kubectl get