一、kubectl 常用命令
logs #查询POD的logs日志信息
cp #拷贝文件到POD或者从POD拷贝文件到本地
attach #实时监控相关POD数据,相当于tail -F
exec #在POD中运行相关命令。
1、logs
kubectl logs nginx-86546d6646-fdcd9
2、cp
从本地拷贝到POD的容器
kubectl cp index.html nginx-86546d6646-h7m2l:/usr/share/nginx/html/
从POD的容器里拷出来
反过来写就行了。
注:有些POD无法使用CP,可能是没有安装tar,须要进入容器,设置YUM源,安装后,可以使用。
3、attach
kubectl attach nginx-86546d6646-fdcd9 #实时查看
4、exec
kubectl exec -it nginx-86546d6646-fdcd9 bash #进入POD里面
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
root@nginx-86546d6646-fdcd9:/#
kubectl exec -it nginx-86546d6646-fdcd9 cat /etc/hosts #在POD中运行命令
5、get
get 命令能够确认的信息类别: deployments (缩写 deploy) events (缩写 ev) namespaces (缩写 ns) nodes (缩写 no) pods (缩写 po) replicasets (缩写 rs) replicationcontrollers (缩写 rc) services (缩写 svc)
[root@k8s-master 2]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.10.0.1 <none> 443/TCP 29h nginx NodePort 10.10.199.80 <none> 3000:31001/TCP 55m [root@k8s-master 2]# kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE mysql 2/2 2 2 28h nginx 2/2 2 2 56m [root@k8s-master 2]# kubectl get events LAST SEEN TYPE REASON OBJECT MESSAGE <unknown> Normal Scheduled pod/nginx-86546d6646-fdcd9 Successfully assigned default/nginx-86546d6646-fdcd9 to k8s-none2 56m Normal Pulled pod/nginx-86546d6646-fdcd9 Container image "nginx:latest" already present on machine 56m Normal Created pod/nginx-86546d6646-fdcd9 Created container nginx 56m Normal Started pod/nginx-86546d6646-fdcd9 Started container nginx <unknown> Normal Scheduled pod/nginx-86546d6646-h7m2l Successfully assigned default/nginx-86546d6646-h7m2l to k8s-node1 56m Normal Pulled pod/nginx-86546d6646-h7m2l Container image "nginx:latest" already present on machine 56m Normal Created pod/nginx-86546d6646-h7m2l Created container nginx 56m Normal Started pod/nginx-86546d6646-h7m2l Started container nginx 56m Normal SuccessfulCreate replicaset/nginx-86546d6646 Created pod: nginx-86546d6646-fdcd9 56m Normal SuccessfulCreate replicaset/nginx-86546d6646 Created pod: nginx-86546d6646-h7m2l 57m Normal Killing pod/nginx-deployment-684bd4f4c-rwlbk Stopping container nginx 57m Normal Killing pod/nginx-deployment-684bd4f4c-z5k8j Stopping container nginx 56m Normal ScalingReplicaSet deployment/nginx Scaled up replica set nginx-86546d6646 to 2 [root@k8s-master 2]# kubectl get pods
加上-o wide 参数可以查看更详细的信息,比如看到此 pod 在哪个 node
[root@k8s-master 2]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mysql-77596d4dcb-c7jdv 1/1 Running 0 28h 10.122.36.72 k8s-node1 <none> <none> mysql-77596d4dcb-mp82l 1/1 Running 0 28h 10.122.117.139 k8s-none2 <none> <none> nginx-86546d6646-fdcd9 1/1 Running 0 78m 10.122.117.142 k8s-none2 <none> <none> nginx-86546d6646-h7m2l 1/1 Running 0 78m 10.122.36.75 k8s-node1 <none> <none>
6、建立POD资源
使用 kubectl create 和 kubectl apply 创建资源对象
kubectl create -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
apply可多次执行。
create 不可多次执行,需要先删除资源,再进行建立。
7、describe [dɪˈskraɪb] 描述
语法: kubectl describe pod pod 名字
语法: kubectl describe node node 名字
语法: kubectl describe deployment deployment 名字
kubectl describe pod nginx-86546d6646-h7m2l
8、delete
kubectl delete -n default service nginx
kubectl delete -n default deployment nginx
kubectl delete node k8s-none2
二、使用 kubectl 管理集群
kubectl 相关命令参数如下:
kubectl edit 编辑服务器侧资源
kubectl replace 替换,使用 yaml 配置文件来替换正在运行中的配置参数
kubectl patch 部分更新资源相关信息
kubectl apply 使用文件戒者标准输入更改配置信息
kubectl scale 重新设定 Deployment/ReplicaSet/RC/Job 的 size
kubectl autoscale Deployment/ReplicaSet/RC 的自劢扩展设定
kubectl cordon 设定 node 不可使用
kubectl uncordon 设定 node 可以使用
kubectl drain 设定 node 迚入维护模式
1、edit
[root@k8s-master 2]# kubectl edit service nginx
service/nginx edited
2、replace
先修写好配置文件,再进行替换,不然会报错
[root@k8s-master 2]# kubectl get service nginx -o yaml > nginx_replace.yaml
[root@k8s-master 2]# vim nginx
nginx-deployment.yaml nginx_replace.yaml nginx-svc.yaml
[root@k8s-master 2]# vim nginx_replace.yaml
[root@k8s-master 2]# kubectl replace -f nginx_replace.yaml
service/nginx replaced
3、kubectl path
更换POD的images镜像
[root@k8s-master 2]# kubectl patch pod nginx-86546d6646-fdcd9 -p '{"spec":{"containers":[{"name":"nginx","image":"richarvey/nginx-php-fpm:latest"}]}}'
pod/nginx-86546d6646-fdcd9 patched
[root@k8s-master 2]# kubectl exec nginx-86546d6646-h7m2l -it bash
bash-4.3# php -v
PHP 7.1.12 (cli) (built: Dec 1 2017 19:26:10) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.12, Copyright (c) 1999-2017, by Zend Technologies
4、kubectl apply
修改端口
[root@k8s-master 2]# kubectl apply -f nginx-svc.yaml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
service/nginx configured
[root@k8s-master 2]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.10.0.1 <none> 443/TCP 30h
nginx NodePort 10.10.199.80 <none> 3000:31008/TCP 131m
5、kubectl scale
scale 命令用于横向扩展,是 kubernetes 戒者 swarm 这类容器编辑平台的重要功能一
实现环境:之前已经设定 nginx 的 replica 副本为 2 改为4
[root@k8s-master 2]# kubectl scale --current-replicas=2 --replicas=4 deployment/nginx
deployment.apps/nginx scaled
[root@k8s-master 2]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
mysql 2/2 2 2 29h
nginx 4/4 4 4 136m
6、kubectl autoscale
autoscale 命令用于自劢扩展确认,scale 需要手劢执行,而 autoscale 则会根据负载迚行调解。而 这条命令则可以对 Deployment 迚行设定,通过最小值和最大值的指定迚行设定。
[root@k8s-master 2]# kubectl autoscale deployment nginx --min=2 --max=10
7、kubectl cordon 不 uncordon
kubectl cordon k8s-node1 #不在node1上建立POD
kubectl uncordon k8s-node1 #取消此操作
8、kubectl drain
kubectl drain 命令 [dreɪn] 排水
用于对某个 node 结点迚行维护。
drain 两个作用: 1. 设定此 node 不可以使用(cordon)
2. evict 驱逐 pod 到他正常的 node 节点上
[root@k8s-master 2]# kubectl drain k8s-node1 --ignore-daemonsets
注:--ignore-daemonsets --忽略守护迚程
deployment手动建立POD nginx
[root@k8s-master .kube]# kubectl create deployment nginx --image=nginx:1.20.2 --port=80 --replicas=2
replicas 设置副本数
1.1版本后不支持replicas这个参数,需要用上面那条命令
kubectl run nginx-deploy --image=nginx --port=80 --replicas=2 --dry-run=true
kubectl get pods -o wide #查看详细POD的信息
[root@k8s-master .kube]# kubectl get pods -n kube-system -o wide 查看POD kube 的运行方式
kubectl create deployment nginx --image=nginx:1.20.2 --replicas=2
建立service
kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP
显示service相关信息
kubectl get svc
运行一个buysbox
kubectl run client1 --image=busybox -it --restart=Never
dns 查询 yum install bing-untils
dig -t A nginx @10.10.0.10
查看网络情况
iptables -vnL -t nat
修改副本数
kubectl scale --replicas=2 deployment nginx
显示POd的标签
kubectl get pods --show-labels
查看deployment 具体信息
kubectl describe deployment nginx
显示service 详细信息
kubectl describe svc nginx
查询相关yml 写法
kubectl explain pods.spec.volumes
kubectl delete -f pod-demo.yaml
apiVersion: v1 kind: Pod metadata: name: pod-demo namespace: default labels: app: myapp3 tier: frontend spec: containers: - name: myapp3 images: nginx:latest ports: - name: http ports: 80 - name: https ports: 443 - name: busybox2 images: busybox:latest command: - "/bin/sh" - "-c" - "echo $(date) >> /usr/share/nginx/html/index.html; sleep 5"
显示标签
kubectl get pods --show-labels
kubectl get pods -l app #显示有App标签的值
kubectl get pods -l app --show-labels
修改标签
kubectl get pods -l cannary --show-labels
kubectl label pods myqpp release=stable --overwrite
显示 两个条件的标签
kubectl get pods -l release=cannary,app=myapp --show-labels
kubectl get pods -l release!=cannary --show-labels
kubectl get pods -l 'release in (stable,cannary)' --show-labels #包含
kubectl get pods -l 'release notin (stable,cannary)' --show-labels #不包含
节点打标签
kubectl get nodes --show-labels
kubectl label nodes node01.kk.com disktype=sshd
好处在于可以在建立POD时选择标签的节点进行部署。
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp3
tier: frontend
spec:
containers:
- name: myapp3
images: nginx:latest
ports:
- name: http
ports: 80
- name: https
ports: 443
- name: busybox2
images: busybox:latest
command:
- "/bin/sh"
- "-c"
- "echo $(date) >> /usr/share/nginx/html/index.html; sleep 5"
nodeselector: disktype=sshd
nodename:直接运行在指定的的node上。
annotaition:
与label 不同在于,它不能用于选择资源对象,公用于对象提供“元数据”
apiVersion: v1 kind: Pod metadata: name: pod-demo namespace: default labels: app: myapp3 tier: frontend annotations: avee.com/create-by: "cluster admin"
pod 的生命周期
状态:pending 挂起
running
failed
succeeded
unknown
创建POD:
PoD生命周期中重要的行为:
初始化容 器
容器探测:liveness readliness
重启 restarpolicy:
Always,OnFailurre,Nver,default to Always.