【笔记】通过命令操作Kubernetes

前言

通过命令操作Kubernetes

对命名空间Namespace的操作

  • namespace可以简写为ns

查看命名空间

  • 不同命名空间可以出现同名pod
1
kubectl get namespace

创建命名空间

<name>:命名空间名称

1
kube create namespace <namespace_name>

删除命名空间

  • 删除命名空间及其包含的所有pod

<namespace_name>:命名空间名称

1
kubectl delete namespace <namespace_name>

对Pod的操作

  • pod可以简写为po

  • k8s以pod为单位来部署容器

  • pod为docker容器的封装对象

  • 一个pod可以封装多个docker容器

查看Pod

-o wide:查看更多信息
--show-labels:展示标签

查看所有命名空间下的Pod

1
kubectl get pods -A

查看default命名空间下的Pod

1
kubectl get pods

查看指定命名空间下的Pod

1
kubectl get pod -n <namespace_name>

查看Pod详细信息

1
kubectl describe pod <pod_name>

查看Pod日志

1
kubectl logs <pod_name>

创建Pod

在default命名空间下创建Pod

<pod_name>:Pod名
<image_name>:<tag>:Docker镜像名

1
kubectl run <pod_name> --image=<image_name>:<tag>

在指定命名空间创建Pod

1
kubectl run <pod_name> --image=<image_name>:<tag> -n <namespace_name>

删除Pod

删除default命名空间下的Pod

1
kubectl delete pod <pod_name>
删除多个Pod
1
kubectl delete pod <pod_name> <pod_name>

删除指定命名空间下的Pod

1
kubectl delete pod <pod_name> -n <namespace_name>
删除多个Pod
1
kubectl delete pod <pod_name_1> <pod_name_2> -n <namespace_name>

按标签删除

1
kubectl delete pod -l <key>=<value>

删除当前命名空间的所有pod

  • 删除后控制器会自动重建新的pod
1
kubectl delete po --all

进入容器内部

进入default命名空间下的容器内部

1
kubectl exec -it <pod_name> bash

进入指定命名空间下的容器内部

1
kubectl exec -it <pod_name> bash -n <namespace_name>

对Deployment工作负载的操作

  • deployment可以简写为deploy

  • Deployment 是一种更高级的资源,用于部署或升级应用

  • 创建Deployment时,ReplicaSet资源会随之创建,实际Pod是由ReplicaSet创建和管理,而不是由Deployment直接管理

  • Deployment可以在应用滚动升级过程中,,引入另一个RepliaSet,,并协调两个ReplicaSet

查看Deployment

查看default命名空间的Deployment

1
kubectl get deployment

查看指定命名空间的Deployment

1
kubectl get deployment -n <namespace_name>

创建Deployment

在default命名空间下创建Deployment

<deployment_name>:Deployment名称

1
kubectl create deployment <deployment_name> --image=<image_name>:<tag>

在指定命名空间下创建Deployment

1
kubectl create deployment <deployment_name> --image=<image_name>:<tag> -n <namespace_name>

删除Deployment

删除default命名空间下的Deployment

1
kubectl delete deploy <deployment_name>

删除指定命名空间下的Deployment

1
kubectl delete deploy <deployment_name> -n <namespace_name>

修改Deployment属性

  • 为Deployment打补丁

添加间隔时间

1
kubectl patch deploy <deployment_name> -p '{"spec": {"minReadySeconds": 10}}'

滚动升级

查看滚动升级的状态

1
kubectl rollout status deploy <deployment_name>

回滚上一个版本

1
kubectl rollout undo deploy <deployment_name>

暂停滚动升级

1
kubectl rollout pause deploy <deployment_name>

继续滚动升级

1
kubectl rollout resume deploy <deployment_name>

对Service服务的操作

  • service可以简写为svc

  • 服务控制容器的访问

  • 提供一个不变的访问地址,可以向所有容器转发调用,类似于SpringCloudZuul

  • 实现服务发现和负载均衡

查看服务

查看default命名空间的服务

1
kubectl get service

查看指定命名空间的服务

1
kubectl get service -n <namespace_name>

查看服务详细信息

1
kubectl describe service <service_name>

创建服务

暴露端口号给其他容器

  • 这种方式暴露的端口只能通过k8s的其他容器间访问

<container_name>:容器名称
--port=80:配置外部暴露的端口号
--target-port=80配置转发到容器的端口号
-n <namespace>:指定命名空间
--type=:暴露的类型

ClusterIP:缺省值,内部暴露
NodePort:外部暴露

1
kubectl expose deploy <container_name> --port=80 --target-port=80
  • 其他容器访问方式

    • 其他容器通过IP访问
    • 其他容器通过域名访问
      • 默认的域名格式为:Deployment名.命名空间名.service:80
  • 此时查看Service,得到暴露内部的端口号

1
kubectl get service
1
2
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
10.1.1.1 80/TCP
  • 其他容器访问暴露的端口
1
curl 10.1.1.1:80
  • 其他容器访问方式
    • 其他容器通过IP访问
    • 其他容器通过域名访问
      • 默认的域名格式为:Deployment名.命名空间名.service:80

暴露端口号给外部网络

  • 这种方式暴露的端口可以通过在统一网段的任意设备访问

-n <namespace>:指定命名空间

1
kubectl expose deploy <container_name> --port=80 --target-port=80 --type=NodePort
  • 此时查看Service,得到外部暴露的端口号
1
kubectl get service
1
2
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
10.1.1.1 80:65535/TCP
  • 局域网内其他设备访问暴露的端口

192.168.0.1:网卡上的真实IP地址
65535:暴露在外面的端口号

1
curl 192.168.0.1:65535

对Labels标签的操作

  • 为每个pod贴不同的标签,service根据不同的标签掌管不同的pod

查看Pod时展示标签

1
kubectl get pod --show-labels

只展示指定的标签

1
kubectl get pod -L <key_1>,<key_2>

为指定Pod贴标签

贴单个标签

1
kubectl label pod <pod_name> <key>=<value>

贴多个标签

1
kubectl label pod <pod_name> <key_1>=<value_1> <key_2>=<value_2>

为指定Pod删除标签

<key>-:根据标签键删除标签

1
kubectl label pod <pod_name> <key>-

为指定Pod修改标签

--overwrite:修改标签,防止误修改,确认修改而不是添加

1
kubectl label pod <pod_name> <key>=<value> --overwrite

根据标签查询Pod

-l:查询标签

  • 根据标签为<key>的pod,查看pod的详细信息,并展示的标签信息
1
kubectl get po -l <key> -L <key_1>,<key_2>
  • 根据标签为<key>=<value>的pod,查看pod的详细信息,并展示的标签信息
1
kubectl get po -l <key>=<value> -L <key_1>,<key_2>
  • 根据标签为<key_1>=<value_1>并且<key_2>=<value_2>的pod,查看pod的详细信息,并展示的标签信息
1
kubectl get po -l <key_1>=<value_1>,<key_2>=<value_2> -L <key_1>,<key_2>
  • 根据标签不为<key>的pod,查看pod的详细信息,并展示的标签信息
1
kubectl get po -l '!<key>' -L <key_1>,<key_2>
  • 根据标签不为<key>=<value>的pod,查看pod的详细信息,并展示的标签信息
1
kubectl get po -l '<key>!=<value>' -L <key_1>,<key_2>
  • 根据标签键<key>包含<value_1><value_2>的pod,查看pod的详细信息,并展示的标签信息
1
kubectl get po -l '<key> in (<value_1>,<value_2>)' -L <key_1>,<key_2>
  • 根据标签键<key>不包含<value_1><value_2>的pod,查看pod的详细信息,并展示的标签信息
1
kubectl get po -l '<key> notin (<value_1>,<value_2>)' -L <key_1>,<key_2>

对控制器的操作

查看控制器

<controller_type>:控制器类型

rc:对RC控制器的操作
rs:对RS控制器的操作
ds:对DS控制器的操作
job:对Job控制器的操作
cj:对CJ控制器的操作
ns:对Namespace操作
po:对容器的操作
all:对控制器、命名空间、容器同时操作

1
kubectl get <controller_type>

创建控制器

--image=<image>:<tag>:指定Docker镜像
--port=<port>:指定对外暴露的端口
--generator=run/v1:指定api版本
<controller_name>:控制器名

1
kubectl run --image=<image>:<tag> --port=<port> --generator=run/v1 <controller_name>

删除控制器

--cascade:不级联删除容器

<fillter_type>:过滤方式

<name>:指定操作的对象名
-l <key>=<value>:指定标签
--all:没有任何过滤

1
kubectl delete <controller_type> <fillter_type>

删除所有对象

  • 删除容器、控制器、服务,不包括pv和pvc
  • 这个操作会删除一个系统Service kubernetes,它被删除后会立即被自动重建
1
kubectl delete all --all

对数据卷的操作

持久数据卷(持久卷)

查看持久卷

1
kubectl get pv

删除全部持久卷

1
kubectl delete pv --all

持久数据卷声明(持久卷声明)

查看持久卷声明

1
kubectl get pvc

删除全部持久卷声明

1
kubectl delete pvc --all

完成

参考文献

哔哩哔哩——云原生技术架构