Kubernetes - 常用命令集合

2023年02月17日 16:03:31    [原创]


一、常用命令

  
kubectl version
kubectl version --short                    #查看版本信息
kubectl api-versions                       #查看api版本信息
kubectl config view                        #查看集群配置信息
kubectl cluster-info                       #查看集群信息
kubectl get pods -n kube-system            #查看pod列表
kubeadm token create --print-join-command  #token重新生成

#创建nginx   --不推荐,推荐直接用yaml方式创建
kubectl create deployment nginx --image=nginx
kubectl scale deployment nginx --replicas=3

#暴露对外端口
kubectl expose deployment nginx --port=80 --type=NodePort

#查看暴露的端口
kubectl get pods,svc -n kube-system
  

二、信息查看


# 查看指定名称空间的service信息
kubectl get svc -A  
kubectl get svc -n kube-system

# 查看componentstatuses信息
kubectl get cs

# 查看所有configmaps信息
kubectl get cm -A

# 查看所有serviceaccounts信息
kubectl get sa -A

# 查看所有daemonsets信息
kubectl get ds -A

# 查看所有deployments信息
kubectl get deploy -A

# 查看所有replicasets信息
kubectl get rs -A

# 查看所有statefulsets信息
kubectl get sts -A

# 查看所有jobs信息
kubectl get jobs -A

# 查看所有ingresses信息
kubectl get ing -A

# 查看有哪些名称空间
kubectl get ns

# 查看pv信息
kubectl get pv

# 查看pvc信息
kubectl get pvc

# 查看node或pod的资源使用情况
# 需要heapster 或metrics-server支持
kubectl top node
kubectl top pod

# 查看集群信息
kubectl cluster-info   或  kubectl cluster-info dump

# 查看各组件信息【172.16.1.110为master机器】
kubectl -s https://172.16.1.110:6443 get componentstatuses

三、Pod


kubectl get pods                         #获取默认命名空间的pod列表
kubectl get pods -A                      #列出所有的pods
kubectl get pods -n 命名空间              #获取指定命名空间的pod列表
kubectl get pods -n 命名空间 -o wide      #获取指定命名空间的pod列表,并显示pod的ip和节点信息
kubectl describe pod nginx               #查看pod的描述信息
kubectl logs -f --tail 500 nginx -n kube-system   #查看指定pod的日志
kubectl delete pod nginx                 #删除指定的pod 
kubectl delete pod nginx -n nsName --grace-period=0 --force  #强制删除
kubectl delete pod nginx -n nsName --grace-period=1
kubectl delete pod nginx -n nsName --now
kubectl edit pod nginx                   #编辑资源

kubectl exec -it nginx -n nsName /bin/sh    #进入容器
kubectl exec -it nginx -n nsName /bin/bash  #进入容器

kubectl label pod nginx role-name=test             #为指定pod添加标签
kubectl label pod nginx role-name=dev --overwrite  #修改lable标签值
kubectl label pod nginx role-name-                 #删除lable标签
kubectl get pods --show-labels                     #获取pod列表,并显示pod标签信息

kubectl get pod mysql -o json            #获取名字为mysql的pod的信息,并以json格式输出
kubectl get -o template pod/mysql --template    # 获取pod容器的状态

kubectl get pods -o yaml                 # 查看pod的详细信息,以yaml格式显示
kubectl get pods -o json                 # 查看pod的详细信息,以json格式显示

kubectl get pod -A --selector="app=dns"  #根据Selector来查询pod

#需要heapster或metrics-server支持
kubectl top node   #查看node或pod的资源使用情况
kubectl top pod
          

四、Service


#为RC的nginx创建service,并通过Service的80端口转发至容器的8000端口上。
kubectl expose rc nginx --port=80 --target-port=8000
kubectl expose -f nginx.yaml --port=80 --target-port=8000

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx1
  name: nginx-svc
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30442
  selector:
    app: nginx1
  type: NodePort

示例2:


apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx-svc
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  sessionAffinity: ClientIP #基于客户端IP保持会话粘性
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 3600    #最大会话停留时间
  selector:                 #其中spec.selector对应上文中nginx.yaml的spec.selector.matchLabels对应标签。
    app: nginx
  type: NodePort

五、Deployment


#更新Deployment
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1                       #更新镜像信息
kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi        #更新资源信息

#编辑Deployment
kubectl edit deployment/nginx-deployment

创建Deployment
kubectl create -f https://kubernetes.io/docs/user-guide/nginx-deployment.yaml --record

#Deployment 扩容
kubectl scale deployment nginx-deployment --replicas 10
kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80  #可以给 Deployment 设置一个 autoscaler,基于当前 Pod的 CPU 利用率选择最少和最多的 Pod 数

#暂停Deployment
kubectl rollout pause deployment/nginx-deployment

#恢复Deployment
kubectl rollout resume deploy nginx

命令监控 Deployment的进度
kubectl rollout status

查看deployment详细信息
kubectl describe deployment nginx

六、Rollout


kubectl rollout history deploy nginx-deployment --revision=2    #查看单个revision 的详细信息
kubectl rollout undo deploy myapp-deployment                    #pod回滚到前一个版本
kubectl rollout undo deploy nginx-deployment --to-revision=2    #使用 --revision参数指定回滚到某个历史版本

查询升级状态
kubectl rollout status deployment deployment_name
暂停滚动升级
kubectl rollout pause deployment deployment_name
恢复滚动升级
kubectl rollout resume deployment deployment_name

kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 #更新镜像信息,--更推荐的更新方式
kubectl rolling-update frontend --image=image:v2                #使用image:v2中的新镜像数据更新frontend的pod
kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2 #rolling-update命令仅针对RC
kubectl rolling-update frontend-v1 frontend-v2 --rollback       #回滚一个正在进行的或最近完成的滚动更新到更新前的版本

七、Label


kubectl label nodes k8s-node01 zone=north             #为指定节点添加标签 
kubectl label nodes k8s-node01 zone-                  #为指定节点删除标签
kubectl label pod nginx -n nsName role-name=test      #为指定pod添加标签
kubectl label pod nginx -n nsName role-name=dev --overwrite     #修改lable标签值
kubectl label pod nginx status=unhealthy --resource-version=1   #仅当resource-version=1时才更新 名为foo的Pod上的label。
kubectl label pod nginx -n nsName role-name-                    #删除lable标签

八、Scale


kubectl autoscale deploy nginx --min=2 --max=10   #自动扩容
kubectl scale deploy nginx --replicas 10
kubectl scale rs foo --replicas=3   #将名为foo中的pod副本数设置为3
kubectl autoscale deployment nginx --min=10 --max=15 --cpu-percent=80  #可以给 Deployment 设置一个 autoscaler,基于当前 Pod的 CPU 利用率选择最少和最多的 Pod 数

九、Annotate(注解)

Annotate 用于存储元数据(如描述、时间戳、工具信息等),Annotations 不直接参与资源的调度和选择,常用于记录创建者、构建版本、监控数据来源等。


#更新Pod“foo”,设置annotation “description”的value “my frontend”
kubectl annotate pods foo description='my frontend'

#更新 namespace中的所有pod
kubectl annotate pods --all description='my frontend running nginx'

十、Port-forward


kubectl port-forward pod/web-app-abcde12345 8080:80       #把本地端口转发到内部pod端口

十一、Proxy


kubectl proxy --port=8001   #在本地的8001端口启动一个代理服务,可以通过这个端口访问Kubernetes API资源

十二、创建密钥


# docker-registry 类型,存储 Docker 镜像仓库的认证信息, 通过imagePullSecrets字段引用
kubectl create secret docker-registry 名称 \
  --docker-server=DOCKER_REGISTRY_SERVER \
  --docker-username=DOCKER_USER \
  --docker-password=DOCKER_PASSWORD \
  --docker-email=DOCKER_EMAIL

# generic 类型,存储任意键值对(如配置文件、证书、令牌等),用于存储数据库密码、保存 API Token等
kubectl create secret generic db-user-pass \
    --from-literal=username=admin \
    --from-literal=password='S!B\*d$zDsb='

kubectl create secret generic empty-secret

十三、证书管理


#使用 check-expiration 子命令来检查证书何时过期:
kubeadm certs check-expiration

#重新生成证书
kubeadm certs renew all 

十四、污点


污点定义在节点的nodeSpec中
每个污点的组成如下:
key=value:effect
每个污点有一个key和value作为污点的标签,其中 value 可以为空,effect 描述污点的作用。

NoSchedule :表示k8s将不会将Pod调度到具有该污点的Node上
PreferNoSchedule :表示k8s将尽量避免将Pod调度到具有该污点的Node上
NoExecute :表示k8s将不会将Pod调度到具有该污点的Node上,同时会将Node上已经存在的Pod驱逐出去

#查看污点
kubectl describe nodes | grep -C 1 "Taints"

#设置污点
kubectl taint nodes node2 check=yuanzhang:NoExecute

#节点说明中,查找Taints字段
kubectl describe nodes node2

#去除污点
kubectl taint nodes node2 check:NoExecute-

十五、容忍度


Tolerations
容忍度定义在Pod的podSpec中

Equal:容忍度与污点必须在key、value和effect三者完全匹配。
Exists:容忍度与污点必须在key和effect二者完全匹配,容忍度中的value字段要使用空值。