kubectl 最新常用命令 –V1.24版本

alias k=kubectl
complete -F __start_kubectl k

Kubectl 上下文和配置

kubectl config view # 显示合并的 kubeconfig 配置。

同时使用多个 kubeconfig 文件并查看合并的配置
KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view

获取 e2e 用户的密码
kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'

kubectl config view -o jsonpath='{.users[].name}'    # 显示第一个用户
kubectl config view -o jsonpath='{.users[*].name}'   # 获取用户列表
kubectl config get-contexts                          # 显示上下文列表
kubectl config current-context                       # 展示当前所处的上下文
kubectl config use-context my-cluster-name           # 设置默认的上下文为 my-cluster-name

添加新的用户配置到 kubeconf 中,使用 basic auth 进行身份认证
kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword

在指定上下文中持久性地保存名字空间,供所有后续 kubectl 命令使用
kubectl config set-context --current --namespace=ggckad-s2

使用特定的用户名和名字空间设置上下文
kubectl config set-context gce --user=cluster-admin --namespace=foo \
  && kubectl config use-context gce

kubectl config unset users.foo                       # 删除用户 foo

设置或显示 context / namespace 的短别名
(仅适用于 bash 和 bash 兼容的 shell,在使用 kn 设置命名空间之前要先设置 current-context)
alias kx='f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f'
alias kn='f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f'

Kubectl apply

apply 通过定义 Kubernetes 资源的文件来管理应用。 它通过运行 kubectl apply 在集群中创建和更新资源。 这是在生产中管理 Kubernetes 应用的推荐方法

-f 指定路径
kubectl apply -f ./my-manifest.yaml           # 创建资源
kubectl apply -f ./my1.yaml -f ./my2.yaml     # 使用多个文件创建
kubectl apply -f ./dir                        # 基于目录下的所有清单文件创建资源
kubectl apply -f https://git.io/vPieo         # 从 URL 中创建资源

从标准输入创建多个 YAML 对象
cat <<eof | kubectl apply -f - apiversion: v1 kind: pod metadata: name: busybox-sleep spec: containers: busybox image: busybox:1.28 args: sleep "1000000" --- busybox-sleep-less "1000" eof< code></eof>

Kubectl get

get查看pod和查找service controller资源

get &#x547D;&#x4EE4;&#x7684;&#x57FA;&#x672C;&#x8F93;&#x51FA;
kubectl get services                          # &#x5217;&#x51FA;&#x5F53;&#x524D;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x4E0B;&#x7684;&#x6240;&#x6709; services
kubectl get pods --all-namespaces             # &#x5217;&#x51FA;&#x6240;&#x6709;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x4E0B;&#x7684;&#x5168;&#x90E8;&#x7684; Pods
kubectl get pods -o wide                      # &#x5217;&#x51FA;&#x5F53;&#x524D;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x4E0B;&#x7684;&#x5168;&#x90E8; Pods&#xFF0C;&#x5E76;&#x663E;&#x793A;&#x66F4;&#x8BE6;&#x7EC6;&#x7684;&#x4FE1;&#x606F;
kubectl get deployment my-dep                 # &#x5217;&#x51FA;&#x67D0;&#x4E2A;&#x7279;&#x5B9A;&#x7684; Deployment
kubectl get pods                              # &#x5217;&#x51FA;&#x5F53;&#x524D;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x4E0B;&#x7684;&#x5168;&#x90E8; Pods
kubectl get pod my-pod -o yaml                # &#x83B7;&#x53D6;&#x4E00;&#x4E2A; pod &#x7684; YAML
&#x5217;&#x51FA;&#x5F53;&#x524D;&#x540D;&#x5B57;&#x7A7A;&#x95F4;&#x4E0B;&#x6240;&#x6709; Services&#xFF0C;&#x6309;&#x540D;&#x79F0;&#x6392;&#x5E8F;
kubectl get services --sort-by=.metadata.name
&#x5217;&#x4E3E;&#x6240;&#x6709; PV &#x6301;&#x4E45;&#x5377;&#xFF0C;&#x6309;&#x5BB9;&#x91CF;&#x6392;&#x5E8F;
kubectl get pv --sort-by=.spec.capacity.storage
&#x5217;&#x4E3E;&#x6240;&#x6709; Pods &#x4E2D;&#x521D;&#x59CB;&#x5316;&#x5BB9;&#x5668;&#x7684;&#x5BB9;&#x5668; ID&#xFF08;containerID&#xFF09;
&#x53EF;&#x7528;&#x4E8E;&#x5728;&#x6E05;&#x7406;&#x5DF2;&#x505C;&#x6B62;&#x7684;&#x5BB9;&#x5668;&#x65F6;&#x907F;&#x514D;&#x5220;&#x9664;&#x521D;&#x59CB;&#x5316;&#x5BB9;&#x5668;
kubectl get pods --all-namespaces -o jsonpath='{range .items[*].status.initContainerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3

&#x5217;&#x51FA;&#x4E8B;&#x4EF6;&#xFF08;Events&#xFF09;&#xFF0C;&#x6309;&#x65F6;&#x95F4;&#x6233;&#x6392;&#x5E8F;
kubectl get events --sort-by=.metadata.creationTimestamp

&#x6BD4;&#x8F83;&#x5F53;&#x524D;&#x7684;&#x96C6;&#x7FA4;&#x72B6;&#x6001;&#x548C;&#x5047;&#x5B9A;&#x67D0;&#x6E05;&#x5355;&#x88AB;&#x5E94;&#x7528;&#x4E4B;&#x540E;&#x7684;&#x96C6;&#x7FA4;&#x72B6;&#x6001;
kubectl diff -f ./my-manifest.yaml

&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x53E5;&#x70B9;&#x5206;&#x9694;&#x7684;&#x6811;&#xFF0C;&#x5176;&#x4E2D;&#x5305;&#x542B;&#x4E3A;&#x8282;&#x70B9;&#x8FD4;&#x56DE;&#x7684;&#x6240;&#x6709;&#x952E;
&#x5728;&#x590D;&#x6742;&#x7684;&#x5D4C;&#x5957;JSON&#x7ED3;&#x6784;&#x4E2D;&#x5B9A;&#x4F4D;&#x952E;&#x65F6;&#x975E;&#x5E38;&#x6709;&#x7528;
kubectl get nodes -o json | jq -c 'paths|join(".")'

&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x53E5;&#x70B9;&#x5206;&#x9694;&#x7684;&#x6811;&#xFF0C;&#x5176;&#x4E2D;&#x5305;&#x542B;&#x4E3A;pod&#x7B49;&#x8FD4;&#x56DE;&#x7684;&#x6240;&#x6709;&#x952E;
kubectl get pods -o json | jq -c 'paths|join(".")'

kubectl rollout

rollout更新资源,版本 回退

kubectl rollout history deployment/frontend                      # &#x68C0;&#x67E5; Deployment &#x7684;&#x5386;&#x53F2;&#x8BB0;&#x5F55;&#xFF0C;&#x5305;&#x62EC;&#x7248;&#x672C;
kubectl rollout undo deployment/frontend                         # &#x56DE;&#x6EDA;&#x5230;&#x4E0A;&#x6B21;&#x90E8;&#x7F72;&#x7248;&#x672C;
kubectl rollout undo deployment/frontend --to-revision=2         # &#x56DE;&#x6EDA;&#x5230;&#x7279;&#x5B9A;&#x90E8;&#x7F72;&#x7248;&#x672C;
kubectl rollout status -w deployment/frontend                    # &#x76D1;&#x89C6; "frontend" Deployment &#x7684;&#x6EDA;&#x52A8;&#x5347;&#x7EA7;&#x72B6;&#x6001;&#x76F4;&#x5230;&#x5B8C;&#x6210;
kubectl rollout restart deployment/frontend                      # &#x8F6E;&#x66FF;&#x91CD;&#x542F; "frontend" Deployment

kubectl patch

更新部分资源

&#x90E8;&#x5206;&#x66F4;&#x65B0;&#x67D0;&#x8282;&#x70B9;
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'

&#x66F4;&#x65B0;&#x5BB9;&#x5668;&#x7684;&#x955C;&#x50CF;&#xFF1B;spec.containers[*].name &#x662F;&#x5FC5;&#x987B;&#x7684;&#x3002;&#x56E0;&#x4E3A;&#x5B83;&#x662F;&#x4E00;&#x4E2A;&#x5408;&#x5E76;&#x6027;&#x8D28;&#x7684;&#x4E3B;&#x952E;&#x3002;
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'

&#x4F7F;&#x7528;&#x5E26;&#x4F4D;&#x7F6E;&#x6570;&#x7EC4;&#x7684; JSON patch &#x66F4;&#x65B0;&#x5BB9;&#x5668;&#x7684;&#x955C;&#x50CF;
kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'

&#x4F7F;&#x7528;&#x5E26;&#x4F4D;&#x7F6E;&#x6570;&#x7EC4;&#x7684; JSON patch &#x7981;&#x7528;&#x67D0; Deployment &#x7684; livenessProbe
kubectl patch deployment valid-deployment  --type json   -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'

&#x5728;&#x5E26;&#x4F4D;&#x7F6E;&#x6570;&#x7EC4;&#x4E2D;&#x6DFB;&#x52A0;&#x5143;&#x7D20;
kubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]'

kubectl edit

编辑资源

kubectl edit svc/docker-registry                      # &#x7F16;&#x8F91;&#x540D;&#x4E3A; docker-registry &#x7684;&#x670D;&#x52A1;
KUBE_EDITOR="nano" kubectl edit svc/docker-registry   # &#x4F7F;&#x7528;&#x5176;&#x4ED6;&#x7F16;&#x8F91;&#x5668;

kubectl scale

对资源进行扩缩容

kubectl scale --replicas=3 rs/foo                                 # &#x5C06;&#x540D;&#x4E3A; 'foo' &#x7684;&#x526F;&#x672C;&#x96C6;&#x4F38;&#x7F29;&#x5230; 3 &#x526F;&#x672C;
kubectl scale --replicas=3 -f foo.yaml                            # &#x5C06;&#x5728; "foo.yaml" &#x4E2D;&#x7684;&#x7279;&#x5B9A;&#x8D44;&#x6E90;&#x4F38;&#x7F29;&#x5230; 3 &#x4E2A;&#x526F;&#x672C;
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql  # &#x5982;&#x679C;&#x540D;&#x4E3A; mysql &#x7684; Deployment &#x7684;&#x526F;&#x672C;&#x5F53;&#x524D;&#x662F; 2&#xFF0C;&#x90A3;&#x4E48;&#x5C06;&#x5B83;&#x4F38;&#x7F29;&#x5230; 3
kubectl scale --replicas=5 rc/foo rc/bar rc/baz                   # &#x4F38;&#x7F29;&#x591A;&#x4E2A;&#x526F;&#x672C;&#x63A7;&#x5236;&#x5668;

kubectl delete

删除资源

kubectl delete -f ./pod.json                                              # &#x5220;&#x9664;&#x5728; pod.json &#x4E2D;&#x6307;&#x5B9A;&#x7684;&#x7C7B;&#x578B;&#x548C;&#x540D;&#x79F0;&#x7684; Pod
kubectl delete pod,service baz foo                                        # &#x5220;&#x9664;&#x540D;&#x79F0;&#x4E3A; "baz" &#x548C; "foo" &#x7684; Pod &#x548C;&#x670D;&#x52A1;
kubectl delete pods,services -l name=myLabel                              # &#x5220;&#x9664;&#x5305;&#x542B; name=myLabel &#x6807;&#x7B7E;&#x7684; pods &#x548C;&#x670D;&#x52A1;
kubectl -n my-ns delete pod,svc --all                                     # &#x5220;&#x9664;&#x5728; my-ns &#x540D;&#x5B57;&#x7A7A;&#x95F4;&#x4E2D;&#x5168;&#x90E8;&#x7684; Pods &#x548C;&#x670D;&#x52A1;
&#x5220;&#x9664;&#x6240;&#x6709;&#x4E0E; pattern1 &#x6216; pattern2 awk &#x6A21;&#x5F0F;&#x5339;&#x914D;&#x7684; Pods
kubectl get pods  -n mynamespace --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs  kubectl delete -n mynamespace pod

kubectl log

日志查看

kubectl logs my-pod                                 # &#x83B7;&#x53D6; pod &#x65E5;&#x5FD7;&#xFF08;&#x6807;&#x51C6;&#x8F93;&#x51FA;&#xFF09;
kubectl logs -l name=myLabel                        # &#x83B7;&#x53D6;&#x542B; name=myLabel &#x6807;&#x7B7E;&#x7684; Pods &#x7684;&#x65E5;&#x5FD7;&#xFF08;&#x6807;&#x51C6;&#x8F93;&#x51FA;&#xFF09;
kubectl logs my-pod --previous                      # &#x83B7;&#x53D6;&#x4E0A;&#x4E2A;&#x5BB9;&#x5668;&#x5B9E;&#x4F8B;&#x7684; pod &#x65E5;&#x5FD7;&#xFF08;&#x6807;&#x51C6;&#x8F93;&#x51FA;&#xFF09;
kubectl logs my-pod -c my-container                 # &#x83B7;&#x53D6; Pod &#x5BB9;&#x5668;&#x7684;&#x65E5;&#x5FD7;&#xFF08;&#x6807;&#x51C6;&#x8F93;&#x51FA;, &#x591A;&#x5BB9;&#x5668;&#x573A;&#x666F;&#xFF09;
kubectl logs -l name=myLabel -c my-container        # &#x83B7;&#x53D6;&#x542B; name=myLabel &#x6807;&#x7B7E;&#x7684; Pod &#x5BB9;&#x5668;&#x65E5;&#x5FD7;&#xFF08;&#x6807;&#x51C6;&#x8F93;&#x51FA;, &#x591A;&#x5BB9;&#x5668;&#x573A;&#x666F;&#xFF09;
kubectl logs my-pod -c my-container --previous      # &#x83B7;&#x53D6; Pod &#x4E2D;&#x67D0;&#x5BB9;&#x5668;&#x7684;&#x4E0A;&#x4E2A;&#x5B9E;&#x4F8B;&#x7684;&#x65E5;&#x5FD7;&#xFF08;&#x6807;&#x51C6;&#x8F93;&#x51FA;, &#x591A;&#x5BB9;&#x5668;&#x573A;&#x666F;&#xFF09;
kubectl logs -f my-pod                              # &#x6D41;&#x5F0F;&#x8F93;&#x51FA; Pod &#x7684;&#x65E5;&#x5FD7;&#xFF08;&#x6807;&#x51C6;&#x8F93;&#x51FA;&#xFF09;
kubectl logs -f my-pod -c my-container              # &#x6D41;&#x5F0F;&#x8F93;&#x51FA; Pod &#x5BB9;&#x5668;&#x7684;&#x65E5;&#x5FD7;&#xFF08;&#x6807;&#x51C6;&#x8F93;&#x51FA;, &#x591A;&#x5BB9;&#x5668;&#x573A;&#x666F;&#xFF09;
kubectl logs -f -l name=myLabel --all-containers    # &#x6D41;&#x5F0F;&#x8F93;&#x51FA;&#x542B; name=myLabel &#x6807;&#x7B7E;&#x7684; Pod &#x7684;&#x6240;&#x6709;&#x65E5;&#x5FD7;&#xFF08;&#x6807;&#x51C6;&#x8F93;&#x51FA;&#xFF09;

kubectl cp

从容器中复制文件和目录

Note: kubectl cp 要求容器镜像中存在 “tar” 二进制文件。如果 “tar” 不存在, kubectl cp 将失败。 对于进阶用例,例如符号链接、通配符扩展或保留文件权限,请考虑使用 kubectl exec

与节点和集群进行交互

Original: https://www.cnblogs.com/xiong97/p/16360246.html
Author: 静言善思
Title: kubectl 最新常用命令 –V1.24版本

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523407/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球