使用 kubectl 管理 Kubernetes 容器平台

提前将镜像 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                443/TCP          13d

nginx        NodePort    10.105.245.139          3000:31001/TCP  19m

现nginx容器中的80端口已经映射到node物理机节点的31001端口上了

。可以查看到nginx服务已经运行在god62和god64上了。

http://192.168.172.164:31001/ ,http://192.168.172.162  都可以访问的。


使用 kubectl 管理 Kubernetes 容器平台_第1张图片



修改一下默认主页:


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


使用 kubectl 管理 Kubernetes 容器平台_第2张图片


方法 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                443/TCP          13d

nginx        NodePort    10.105.245.139          3000:31002/TCP  33m

修改后,发现可以通过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                443/TCP          14d

nginx        NodePort    10.105.245.139          3000:31003/TCP  24h


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                443/TCP          14d

nginx        NodePort    10.105.245.139          3000:31004/TCP  24h


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 个。


使用 kubectl 管理 Kubernetes 容器平台_第3张图片


执行 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


使用 kubectl 管理 Kubernetes 容器平台_第4张图片

执行 drain 命令,让 god62 不可用,并把 god62 上已经运行 pod 驱逐到其他 node 上:

kubectl drain god62 --ignore-daemonsets  注:--ignore-daemonsets --忽略守护进程

结果确认

把 god62 上的 pod 删除后,k8s 会根据 replicas 的机制,在清退 pod 和设定 node 时,在其他结点 上生成新的 pod。这时就可以对 god62 节点进行维护了,维护好后,重新 uncordon 即可。


使用 kubectl 管理 Kubernetes 容器平台_第5张图片

等修复好结点后,现在恢复可用:  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                  15d  v1.20.4  beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=god62,kubernetes.io/os=linux,node-role.kubernets.io/worker=worker,xuexi=jianchi


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

你可能感兴趣的:(使用 kubectl 管理 Kubernetes 容器平台)