当前位置 博文首页 > asd1358355022的博客:指令很全的K8s学习笔记
Kubectl命令行管理对象
类型 命令 描述
基础命令
create 通过文件名或标准输入创建资源。
expose 将一个资源公开为一个新的Kubernetes服务。
run
创建并运行一个特定的镜像,可能是副本。
创建一个deployment或job管理创建的容器。
set 配置应用资源。
修改现有应用程序资源。
get 显示一个或多个资源。
explain 文档参考资料。
edit 使用默认的编辑器编辑一个资源。
delete 通过文件名、标准输入、资源名称或标签选择器来删除资源。
部署命令
rollout 管理资源的发布。
rolling-update 执行指定复制控制的滚动更新。
scale 扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job。
autoscale 创建一个自动选择扩容或缩容并设置Pod数量。
集群管理命令
certificate 修改证书资源。
cluster-info 显示集群信息。
top 显示资源(CPU/Memory/Storage)使用。需要Heapster运行。
cordon 标记节点不可调度。
uncordon 标记节点可调度。
drain 维护期间排除节点。
taint
--------------------------------------
Kubectl命令行管理对象
类型 命令 描述
故障诊断和调试命令
describe 显示特定资源或资源组的详细信息。
logs 在pod或指定的资源中容器打印日志。如果pod只有一个容器,容器名称是可选的。
attach 附加到一个进程到一个已经运行的容器。
exec 执行命令到容器。
port-forward 转发一个或多个本地端口到一个pod。
proxy 为kubernetes API Server启动服务代理。
cp 拷贝文件或目录到容器中。
auth 检查授权。
高级命令
apply 通过文件名或标准输入对资源应用配置。
patch 使用补丁修改、更新资源的字段。
replace 通过文件名或标准输入替换一个资源。
convert 不同的API版本之间转换配置文件。YAML和JSON格式都接受。
设置命令
label 更新资源上的标签。
annotate 在一个或多个资源上更新注释。
completion 用于实现kubectl工具自动补全。
其他命令
api-versions 打印受支持的API版本。
config 修改kubeconfig文件(用于访问API,比如配置认证信息)。
help 所有命令帮助。
plugin 运行一个命令行插件。
version 打印客户端和服务版本信息
------------------------------------
Kubectl命令行管理对象
示例:
# 运行应用程序
kubectl run hello-world --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80
# 显示有关Deployments信息
kubectl get deployments hello-world
kubectl describe deployments hello-world
# 显示有关ReplicaSet信息
kubectl get replicasets
kubectl describe replicasets
# 创建一个Service对象暴露Deployment(在88端口负载TCP流量)
kubectl expose deployment hello-world --port=88 --type=NodePort --target-port=80 --name=example-service
# 创建一个Service对象暴露Deployment(在4100端口负载UDP流量)
kubectl expose deployment hello-world --port=4100 --type=NodePort --protocol=udp --target-port=80 --
name=example-service
# 显示有关Service信息
kubectl describe services example-service
# 使用节点IP和节点端口访问应用程序
curl http://<public-node-ip>:<node-port>
#根据端口查询服务
netstat -anpt | grep : 端口号
#ingress查看
kubectl get svc -n ingress-ngnix
#获取configmap
kubuvtl get cm
#configmap详细信息
kubectl describe cm configmap名称
#修改configmap
kubectl edit configmap configmap名称
#阿里云时间同步服务器
ntpdate ntp1.aliyun.com
#获取pv
kubectl get pv
#获取pvc
kubectl get pvc
#获取指定pv的内容输出格式为yaml
kubectl get pv pv名称 -o yaml
#修改内容
kubectl edit pv pv名称
#通过 kubectl replace 命令完成对Node 状态的修改
[root@master node]# kubectl replace -f unschedule_node.yaml
node/192.168.0.222 replaced
[root@master node]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
192.168.0.144 Ready <none> 25d v1.11.6
192.168.0.148 Ready <none> 25d v1.11.6
192.168.0.222 Ready,SchedulingDisabled <none> 5d v1.11.6
#查看Node的状态,可以观察到在Node的状态中增加了一项SchedulingDisabled,对于后续创建的Pod,系统将不会再向该Node进行调度。也可以不使用配置文件,直接使用 kubectl patch 命令完成:
kubectl patch node k8s-node-1 -p '{"spec": {"unschedulaable": true}}'
#需要注意的是,将某个Node脱离调度范围时,在其上运行的pod并不会自动停止,管理员需要手动停止在改Node是上运行的pod.
#同样,如果需要将某个node重新纳入集群调度范围,则将unschedulable 设置为false,再次执行 kubectl replace 或者kubectl patch 命令就能恢复系统对改node的调度。
#第三种方法:
#使用kubectl cordon <node_name> 对某个Node 进行隔离调度操作
[root@master node]# kubectl cordon 192.168.0.148
node/192.168.0.148 cordoned
[root@master node]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
192.168.0.144 Ready <none> 25d v1.11.6
192.168.0.148 Ready,SchedulingDisabled <none> 25d v1.11.6
192.168.0.222 Ready,SchedulingDisabled <none> 5d v1.11.6
#恢复调度操作:
[root@master node]# kubectl uncordon 192.168.0.222
node/192.168.0.222 uncordoned
[root@master node]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
192.168.0.144 Ready <none> 25d v1.11.6
192.168.0.148 Ready <none> 25d v1.11.6
192.168.0.222 Ready <none> 5d v1.11.6
#创建命名空间
kubectl create namespace 名称
#获取命名空间
kubectl get namespace
#删除命名空间
kubectl delete namespace 名称
#获取目前API接口信息
kubectl api-resources
#对运行时容器进行修改
kubectl patch pod rc-容器app名称-kpiqt -p
#对副本扩缩容
kubectl scale rc rc-容器app名称 —replicas=扩缩容数量
#pod对副本自动进行扩缩容
kubectl autoscale rc rc-容器app名称 --min=1 --max=4
kubectl常用命令:
kubectl cluster-info #查看集群信息
kubectl describe pod -n kube-system kube-flannel-ds-amd64-trpqq #查看pod的描述信息
kubectl get pods -n kube-system #查看指定命名空间的pod
kubectl create deployment NAME --image=image [--dry-run] [options] #创建deployment, dry-run为true就是测试不执行
kubectl create serviceaccount admin -o yaml --dry-run #针对所有可以用kubectl create 创建的资源,都可以加 -o yaml --dry-run ,用来导出yaml标准格式的文件。
kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP
#为deployment创建service, --name为service的名字, --port为暴露端口, --target-port为目标pod端口
dig -t A nginx.default.svc.cluster.local @10.96.0.10 #验证是否能正确解析service, @后边的ip为k8s的dns地址
kubectl describe svc nginx #查看名为nginx的这个service的详细信息
kubectl get pods --show-labels #查看pod的标签
kubectl scale deployment nginx-deploy --replicas=3 #扩容或缩容, --replicas为数量
wget -O - -q nginx-deploy
kubectl rollout undo deployment myapp-deploy --to-revision=1 #回滚到指定版本, 默认回滚到上一版本
kubectl explain pod #查看pod用法的详细信息(参数选项等)
kubectl工具的使用
#创建
kubectl run nginx --replicas=3 --labels="app=nginx-example" --image=nginx:1.17.4 --port=80
#查看
kubectl get deploy
kubectl get pods --show-labels
kubectl get pods -l app=example
kubectl get pods -o wide
#发布
kubectl expose deployment nginx --port=88 --type=NodePort --tartget-port=80 --name=nginx-service
kubectl describe service nginx-service
#故障排查
kubectl describe TYPE NAME_PREFIX
kubectl logs nginx-xxx
kubectl exec -it nginx-xxx bash
#更新
kubectl set image deployment/nginx nginx=nginx:1.17.4
或
kubectl edit deployment/nginx
#资源发布管理
kubectl rollout status deployment/nginx
kubectl rollout history deployment/nginx
kubectl rollout history deployment/nginx --revision=3 kubectl scale deployment nginx --replicas=10
#回滚
kubectl rollout undo deployment/nginx-deployment
kubectl rollout undo deployment/nginx-deployment --to-revision=3
#删除
kubectl delete deploy/nginx
kubectl delete svc/nginx-service
#写yaml文件用到的api
#定义配置时,指定最新稳定版API(当前为v1)
kubectl api-versions
YAML配置文件管理对象
对象管理:
# 创建deployment资源
kubectl create -f nginx-deployment.yaml
# 查看deployment
kubectl get deploy
# 查看ReplicaSet
kubectl get rs
# 查看pods所有标签
kubectl get pods --show-labels
# 根据标签查看pods
kubectl get pods -l app=nginx
# 滚动更新镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.11
或者
kubectl edit deployment/nginx-deployment
或者
kubectl apply -f nginx-deployment.yaml
# 实时观察发布状态:
kubectl rollout status deployment/nginx-deployment
# 查看deployment历史修订版本
kubectl rollout history deployment/nginx-deployment
kubectl rollout history deployment/nginx-deployment --revision=3
# 回滚到以前版本
kubectl rollout undo deployment/nginx-deployment
kubectl rollout undo deployment/nginx-deployment --to-revision=3
# 扩容deployment的Pod副本数量
kubectl scale deployment nginx-deployment --replicas=10
# 设置启动扩容/缩容
kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80
apiVersion: v1
kind: Pod
metadata:
name: pod-test
labels:
os: centos
spec:
containers:
- name: hello
image: centos:7
env:
- name: Test
value: "123456"
command: ["bash","-c","while true;do date;sleep 1;done"]
restartPolicy: OnFailure
支持三种策略:
Always:当容器终止退出后,总是重启容器,默认策略。
OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
Never:当容器终止退出,从不重启容器。
apiVersion: v1
kind: Pod
metadata:
name: pod-test1
labels:
test: centos
spec:
containers:
# 第一个容器
- name: hello-write
image: centos:7
command: ["bash","-c","for i in {1..1000};do echo $i >> /data/hello;sleep 1;done"]
# 第二个容器
- name: hello-read
image: centos:7
command: ["bash","-c","for i in {1..1000};do cat $i >> /data/hello;sleep 1;done"]
volumeMounts:
- name: data
mountPath: /data
# 数据卷
volumes:
- name: data
hostPath:
path: /data
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.10
ports:
- name: http
containerPort: 80
hostIP: 0.0.0.0
hostPort: 80
protocol: TCP
- name: https
containerPort: 443
hostIP: 0.0.0.0
hostPort: 443
protocol: TCP
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.10
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /index.html
port: 80
apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中
kind: Pod #指定创建资源的角色/类型
metadata: #资源的元数据/属性
name: web04-pod #资源的名字,在同一个namespace中必须唯一
labels: #设定资源的标签,详情请见http://blog.csdn.net/liyingke112/article/details/77482384
k8s-app: apache
version: v1
kubernetes.io/cluster-service: "true"
annotations: #自定义注解列表
- name: String #自定义注解名字
spec:#specification of the resource content 指定该资源的内容
restartPolicy: Always #表明该容器一直运行,默认k8s的策略,在此容器退出后,会立即创建一个相同的容器
nodeSelector: #节点选择,先给主机打标签kubectl label nodes kube-node1 zone=node1
zone: node1
containers:
- name: web04-pod #容器的名字
image: web:apache #容器使用的镜像地址
imagePullPolicy: Never #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,
# Always,每次都检查
# Never,每次都不检查(不管本地是否有)
# IfNotPresent,如果本地有就不检查,如果没有就拉取
command: ['sh']