【go云原生】Kubernetes:kubectl
最近更新:2025-01-02
|
字数总计:3.8k
|
阅读估时:16分钟
|
阅读量: 次
Kubernetes:kubectl kubectl基本语法 kubectl基础操作命令 api-resources api-versions create expose run set explain get edit delete label annotate kubectl应用部署命令 diff apply replace rollout history pause与resume restart status undo scale autoscale kubectl集群管理 cluster-info dump cordon uncordon drain kubectl故障排除和调试命令 describe logs attach exec port-forward proxy cp debug
Kubernetes:kubectl
master节点与APIServer通信的命令行工具——kubectl。默认配置文件目录在$HOME/.kube/config。可以通过–kubeconfig参数来指定kubectl的配置文件。
RC
myhello-rc.yaml1 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 apiVersion: v1 kind: ReplicationController metadata: name: myhello-rc labels: name: myhello-rc spec: relicas: 5 selector: name: myhello-pod template: metadata: labels: name: myhello-pod spec: containers: - name: myhello image: xlhmzch/hello:1.0.0 imagePullPolicy: IfNotPresent ports: - containerPort: 80 env : - name: env1 value: "k8s-env1" - name: env2 value: "k8s-env2"
RC-Service
myhello-svc.ymal1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 apiVersion: v1 kind: Service metadata: name: myhello-svc labels: name: myhello-svc spec: type : NodePort ports: - port: 80 protocal: TCP targetPort: 80 name: http nodePort: 30000 selector: name: myhello-pod
Deployment
myapp-deployment.yaml1 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 apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment labels: name: myapp spec: replicas: 5 selector: matchLabels: name: myapp template: metadata: labels: name: myapp spec: containers: - name: myhello image: xlhmzch/hello:1.0.0 imagePullPolicy: IfNotPresent ports: - containerPort: 80 env : - name: env1 value: "k8s-env1" - name: env2 value: "k8s-env2" - name: myredis image: redis imagePillPolicy: IfNotPresent ports: - containerPort: 6379 env : - name: env1 value: "k8s-env1" - name: env2 value: "k8s-env2"
Deployment-Service
myapp-svc.yaml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 apiVersion: v1 kind: Service metadata: name: myapp-svc labels: name: myapp-svc spec: type : NodePort ports: - port: 80 protocol: TCP targetPort: 80 name: http nodePort: 30001 selector: name: myapp
DaemonSet
cadvisor-ds.yaml1 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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 apiVersion: apps/v1 kind: DaemonSet metadata: name: cadvisor namespace: default labels: app: cadvisor spec: selector: matchLabels: app: cadvisor template: metadata: labels: app: cadvisor spec: tolerations: - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule containers: - name: cadvisor image: google/cadvisor:v0.32.0 ports: - containerPort: 8080 resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: rootfs mountPath: /rootfs - name: run mountPath: /var/run - name: sys mountPath: /sys - name: varlibdocker mountPath: /var/lib/docker/ - name: devdisk mountPath: /dev/disk readOnly: true - name: localtime mountPath: /etc/localtime readOnly: true terminationGroupPeriodseconds: 30 volumes: - name: rootfs hostPath: path: / - name: run hostPath: path: /var/run - name: sys hostPath: path: /sys/ - name: varlibdocker hostPath: path: /var/lib/docker/ - name: devdisk hostPath: path: /dev/disk - name: localtime hostPath: path: /etc/localtime
DaemonSet-Service
cadvisor-svc.yaml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 apiVersion: v1 kind: Service metadata: name: cadvisor-svc labels: name: cadvisor-svc spec: type : NodePort ports: - port: 80 protocal: TCP targetPort: 8080 name: http nodePort: 30002 selector: name: cadvisor
kubectl基本语法
安装命令自动补全1 2 3 apt-get install -y bash-completion echo "source <(kubectl completion bash)" >> ~/.bashrcsource ~/.bashrc
基本语法 1 2 3 4 5 6 kubectl [command ] [type ] [name] [flags] kubectl get node k8s-node1 kubectl get node k8s-node1 k8s-node2 kubectl get node/k8s-node1 svc/k8s-svc1 kubectl get -f myhello-rc.yaml -f myhello-svc.yaml
实际操作1 2 3 4 5 6 7 8 9 10 11 12 13 mkdir workcd workvim myhello-rc.yaml vim myhello-svc.yaml vim myapp-deployment.yaml vim myapp-svc.ymal vim cadvisor-ds.yaml vim cadvisor-svc.yaml kubectl create -f cadvisor-ds.yaml kubectl get -f cadvisor-ds.yaml kubectl get ds cadvisor kubectl get ds/cadvisor -o wide
kubectl基础操作命令 api-resources 1 2 3 kubectl api-resources kubectl api-resources -o wide kubectl api-resources --namespaced=true
api-versions
create 1 2 kubectl create -f myhello-svc.yaml cat myapp-svc.yaml | kubectl create -f -
expose
给定副本控制器、服务、Deployment或Pod,将其暴露为新的k8s Service,其本质是通过现有资源对象的配置信息将新的Service与原有资源背后的Pod作关联。1 2 3 4 5 6 7 8 9 10 11 kubectl export rc myhello-rc --port=8000 -target-port=80 --name=myhello-svc-8000 curl http://10.99.220.173:8000/ping kubectl expose -f myhello-rc.yaml --port=8000 --target-port=80 --name=myhello-svc-8000-file kubectl expose pod myapp-deployment-b187eoin --port=444 --name=myhello-svc-444 kubectl expose myhello-svc --port=8000 --target-port=80 --name=myhello-svc-8080 kubectl get svc kubectl describe svc myhello-svc-444
run
在集群中使用指定镜像启动容器1 2 3 4 5 6 7 8 9 10 11 12 13 kubectl run nginx --image=nginx kubectl run myhello --image=xlhmzch/hello:1.0.0 kubectl run redis --image=redis --port=6379 --env ="DNS_DOMAIN=cluster" --env ="POD_NAMESPACE=default" --labels="app=redis,env=prod" kubectl describe pod/redis kubectl run nginx --image=nginx --dry-run=client kubectl run -i -t busybox --image=busybox --restart=Never kubectl get pod
set
为对象设置功能特性(环境变量、镜像等)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 kubectl set env rc/myhello-rc STORAGE_DIR=/local kubectl describe rc myhello-rc kubectl describe pod myhello-rc-w19815f kubectl set env rc/myhello-rc --list kubectl set env pods --all --list kubectl set env rc/myhello-rc STORAGE_DIR- kubectl set env rc --all ENV- kubectl set image deployment/myapp-deployment myhello=xlhmzch/hello:1.0.1 kubectl set image -f myapp-deployment.yaml myhello=xlhmzch/hello:1.0.1 --local -o yaml kubectl set resources deployment myapp-deployment -c=myhello --limits=cpu=200m,memory=512Mi kubectl set resources deployment myapp-deployment --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi kubectl set selector svc myhello-svc env =proc kubectl set selector svc myhello-svc name=myhello-pod
explain
显示资源文档说明1 2 kubectl explain pod kubectl explain pod.spec.container
get
显示一个或多个资源1 2 3 4 kubectl get pod kubectl get ns kubectl get pod -n kube-system kubectl get rc,services
edit
修改服务器上的某资源1 kubectl edit svc/myhello-svc
delete 1 2 3 4 kubectl delete -f myhello-rc.yaml cat myhello-rc.yaml | kubectl delete -f - kubectl delete pod,service myhello-pod myhello-svc kubectl delete pods,services -l name=myhello-pod
label
更新资源标签1 2 3 4 5 kubectl label pods nginx status=unhealthy kubectl describe pod nginx kubectl label --overwrite pods nginx status=healthy kubectl label pods nginx status- kubectl label pods --all status=unhealthy
annotate
更新资源所关联的注解1 2 kubectl annotate rc myhello-rc description='my hello rc' kubectl annotate rc -f myhello-rc.yaml description1='hello rc1'
kubectl应用部署命令 diff
显示目前版本,也就是正在线上的内容,与将要应用的版本之间的差异1 2 3 kubectl diff -f myapp-deployment.yaml cat myapp-deployment.yaml | kubectl diff -f - kubectl diff -f '*.yaml'
apply
基于文件或标准输入,将配置应用1 2 kubectl apply -f myapp-deployment.yaml cat myapp-deployment.yaml | kubectl apply -f -
replace
基于文件或标准输入,将新的配置文件以替换的方式应用到资源上1 2 kubectl replace -f myapp-deployment.yaml
rollout
history
查看历史修订版本和配置。1 kubectl rollout history deployment myapp-deployment
pause与resume
将提供的资源标记为已暂停或暂停结束。仅支持deployment1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 kubectl rollout pause deployment myapp-deployment kubectl edit deployments.apps myapp-deployment kubectl describe pod myapp-15981qewrgeg kubectl describe deployments.apps myapp-deployment kubectl rollout resume deployment myapp-deployment kubectl describe pod myapp-15981qewrgeg kubectl rollout pause deployment myapp-deployment vim myapp-deployment kubectl apply -f myapp-deployment.yaml kubectl describe pod myapp-15981qewrgeg kubectl replace -f myapp-deployment.yaml kubectl describe pod myapp-15981qewrgeg
restart
重启资源对象1 2 3 kubectl rollout restart deployment myapp-deployment kubectl rollout restart ds cadvisor
status
查看部署状态1 kubectl rollout status deployment myapp-deployment
undo
回滚到之前或指定版本1 2 3 4 5 6 kubectl edit deployments.apps myapp-deployment kubectl edit deployments.apps myapp-deployment kubectl edit deployments.apps myapp-deployment kubectl rollout history deployment myapp-deployment kubectl rollout undo deployment myapp-deployment kubectl rollout undo deployment myapp-deployment --to-revision 22
scale
为deployment、replica set、replication controller、statefulset设置pod的副本数1 2 3 kubectl scale deployment myapp-deployment --replicas 30 kubectl get pod kubectl scale deployment myapp-deployment --replicas 5
autoscale
创建自动伸缩器,自动选择和设置在k8s集群中运行的pod数。1 2 3 4 5 kubectl autoscale deployment myapp-deployment --min=2 --max=10 kubectl autoscale deployment myapp-deployment --max=5 --cpu-percent=80 kubectl get horizontalpodautoscalers
kubectl集群管理 cluster-info
dump
集群信息输出1 2 3 kubectl cluster-info dump kubectl cluster-info --output-directory=$HOME /cluster-state -o yaml kubectl cluster-info --output-directory=$HOME /cluster-state -o yaml --namespaces default,kube-system
cordon
标记节点为不可调度1 2 kubectl get node -o wide kubectl cordon k8s-node1
uncordon
标记节点为可调度1 kubectl uncordon k8s-node1
drain
腾空节点,准备维护,该操作会自动将节点设置为不可调度状态1 2 kubectl drain k8s-node1 --force --ignore-daemonsets kubectl uncordon k8s-node1
kubectl故障排除和调试命令 describe
显示某个资源或某组资源的详细信息1 2 3 kubectl describe nodes k8s-node1 kubectl describe pod myapp-deployment-2981ewqt kubectl describe node k8s
logs
输出pod中某容器的日志,注意是容器1 2 3 4 5 kubectl logs nginx kubectl logs pod/myapp-deployment-1298qeqwrt kubectl logs -l name=myapp --all-containers=true kubectl logs --tail =5 nginx kubectl logs --since=1h nginx
attach
连接到一个正在运行的容器,是针对容器的,所以无论是对deployment还是service都是找到一个容器的1 kubectl attach deployments/myapp-deployment
exec
在容器里面执行相关命令,是针对容器的,所以无论是对deployment还是service都是找到一个容器的1 2 kubectl exec myapp-deployment-oiqnetoiqhwpeotih --date kubectl -it exec myapp-deployment-oiqnetoiqhwpeotih --sh
port-forward
将一个或多个本地端口转发到pod,如果多个符合条件,自动选择一个pod。是针对容器的,所以无论是对deployment还是service都是找到一个容器的1 2 3 4 5 kubectl run nginx --image=nginx kubectl port-forward pod/nginx 5000 6000 kubectl port-forward pod/nginx 5000:80 6000:81 kubectl port-forward service/myapp-svc 8000:http kubectl port-forward --address localhost,192.168.239.142 pod/nginx 8888:80
proxy
在本机主机和k8s api服务器之间创建代理服务器或应用程序网关。1 2 3 kubectl prox --api-prefix=/custom/ --port=8011 --www=$HOME / --www-prefix=/static/ curl http://localhost:8011/custom/api/v1/pods curl http://localhost:8011/static/
cp
将文件和目录考入、考出容器1 2 kubectl cp /tmp/app myapp-deployment-nonot574:app1 kubectl exec myapp-deployment-nonot574 ls
debug
创建用于排查工作负载和节点故障的调试会话1 2 3 4 5 6 7 8 9 10 11 12 13 kubectl run nginx --image=nginx kubectl debug nginx -it --image=unbuntu --copy-to=my-debugger --share-processes kubectl get pod my-debugger -o yaml | grep shareProcessNamespace > ps kubectl run myhello -image=xlhmzch/hello:1.0.0 kubectl debug myhello -it --copy-to=my-debugger1 --container=myhello -- /bin/sh kubectl debug myhello -it --copy-to=my-debugger2 --set-image=hello=xlhmzch/hello:1.0.1 kubectl debug node/k8s-node1 -it --image=busybox
2024-12-30
该篇文章被 Cleofwine
归为分类:
Go云原生