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字段要使用空值。