BlueXIII's Blog

热爱技术,持续学习

0%

kubectl常用操作

参考

配置自动补全

1
2
3
4
5
6
7
8
9
# bash
source <(kubectl completion bash) # 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包。
echo "source <(kubectl completion bash)" >> ~/.bashrc # 在你的 bash shell 中永久地添加自动补全
# zsh
source <(kubectl completion zsh) # 在 zsh 中设置当前 shell 的自动补全
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # 在你的 zsh shell 中永久地添加自动补全
# alias
alias k=kubectl
complete -o default -F __start_kubectl k

docker转kubectl操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 测试容器
kubectl run test-postfix --restart='Never' --image postfix:1.1 --command -- sleep infinity
kubectl exec -it test-postfix -- bash
kubectl delete pod test-postfix --force

# run
docker run -d --restart=always -e DOMAIN=cluster --name nginx-app -p 80:80 nginx
kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster"

# exec
docker exec nginx-app cat /etc/hostname
kubectl exec nginx-app -- cat /etc/hostname

# exec shell
docker exec -it nginx-app /bin/sh
kubectl exec -it nginx-app -- /bin/sh

# log
docker logs -f --tail 100 nginx-app
kubectl logs -f --tail 100 nginx-app

# delete
docker stop nginx-app && docker rm -f nginx-app
kubectl delete pod nginx-app --force

# 复杂run
docker run -itd --name redis \
-p 6379:6379 \
-v /tmp/data:/data \
--env foo=bar \
redis:5.0.14-alpine --requirepass "123456"

kubectl run test-redis \
--image=redis:5.0.14-alpine \
--restart=Never \
--port=6379 \
--env="foo=bar" \
-- --requirepass "123456"

运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 命令行
kubectl run myterminal --image=busybox:1.28 --restart=Never -- bash

# 生成pod
kubectl run test-pod --image=nginx --restart=Never # Always/OnFailure/Never
# 创建Job
kubectl create job test-job --image=busybox:1.28 -- echo "Hello World"
# 创建Cronjob
kubectl create cronjob test-cron --image=busybox:1.28 --schedule="*/1 * * * *" -- echo "Hello World"
# 生成deploy
kubectl create deployment test-dp --image=nginx --replicas=2
# 生成svc
kubectl expose deployment test-dp --type=ClusterIP --port=80 --target-port=8000 --name=test-svc
kubectl delete svc test-svc
# 生成名称空间
kubectl create ns test-ns
# 生成configmap
kubectl create configmap test-cm --from-literal=key1=value1 --from-literal=key2=value2

查看

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看所有namespace的pod
kubectl get pods -A # 或--all-namespaces
kubectl get pods test-pod -o wide # 展示更多列
# 获取所有deployment
kubectl get deployment
# 查看deployment和servers
kubectl get deployment,services
# 查看pod详情
kubectl describe pods test-pod --namespace=default
# 查看pod日志
kubectl logs -f --tail 100 test-pod
# 查看pod环境变量
kubectl exec test-pod -- printenv

集群

1
2
3
4
5
6
7
8
9
10
11
12
# 集群核心组件运行情况
kubectl cluster-info
# 命名空间
kubectl get namespaces
# 版本
kubectl version
# api
kubectl api-versions
# 查看事件
kubectl get events
# 获取全部节点
kubectl get nodes

创建

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建资源
kubectl create -f ./nginx.yaml
# 创建当前目录下的所有yaml资源
kubectl create -f ./
# 使用多个文件创建资源
kubectl create -f ./nginx1.yaml -f ./mysql2.yaml
# 使用目录下的所有文件夹的yaml来创建资源
kubectl create -f ./dir
# 使用 url 来创建资源
kubectl create -f https://xxxx/xxx
# 获取api文档
kubectl explain pods
kubectl explain service

伸缩

1
2
3
4
5
6
# 自动伸缩
kubectl autoscale deployment test-dp --min=2 --max=5
# 修改副本数
kubectl scale --replicas=3 deployment/test-dp
# 变更多个控制器的数量
kubectl scale --replicas=5 rc/foo rc/bar rc/baz

删除

1
2
3
4
# 根据yaml删除
kubectl delete -f ./pod.yaml
# 根据名称删除,强制删除
kubectl delete pods test-pod --force

交互

1
2
3
4
5
6
7
8
9
10
# 交互式 shell 的方式运行 pod
kubectl run -it busybox --image=busybox -- sh
kubectl run -it busybox --image=busybox:1.28 --namespace=dubhe-uat -- sh
kubectl exec -it busybox --namespace=dubhe-uat -- sh
# 在已存在的pod单容器中执行命令
kubectl exec nginx-pod -- ls /
# 在已存在的pod中的容器执行命令
kubectl exec nginx-pod -c my-container -- ls /
## 端口转发,本地监听5000
kubectl port-forward test-pod 5000:80

复制文件

1
2
3
4
kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir            # 将 /tmp/foo_dir 本地目录复制到远程当前命名空间中 Pod 中的 /tmp/bar_dir
kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container # 将 /tmp/foo 本地文件复制到远程 Pod 中特定容器的 /tmp/bar 下
kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar # 将 /tmp/foo 本地文件复制到远程 “my-namespace” 命名空间内指定 Pod 中的 /tmp/bar
kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar # 将 /tmp/foo 从远程 Pod 复制到本地 /tmp/bar

调度配置

1
2
3
4
5
6
7
# 标记my-node不可调度
kubectl cordon k8s-node
# 驱逐my-node上的pod以待维护
kubectl drain k8s-node
# 标记my-node可调度
kubectl uncordon k8s-node

DEBUG

1
2
3
4
5
kubectl run -it debug-pod --image=bluexiii/ubuntu:22.04 --image-pull-policy='Always' -n dubhe-dev  -- bash
kubectl run -it chart-update --image=bluexiii/chart-update:latest --image-pull-policy='Always' -n dubhe-dev -- bash

kubectl exec -it chart-update --namespace=dubhe-dev -- bash
kubectl delete pod chart-update --namespace=dubhe-dev --force