kubectl version
kubectl get nodes
kubectl api-resources
kubectl cluster-info
source <(kubectl completion bash)
可通过TAB键实现命令补全,建议将其写入 /etc/profile
journalctl -u kubelet -f
kubectl get [-o wide|json|yaml] [-n namespace]
获取资源的相关信息,-n指定命名空间,-o指定输出格式
resource可以是具体资源名称,如"pod nhinx-xxx";也可以是资源类型,如“pod,node,svc,deploy”多种资源使用逗号间隔;或者all(仅展示几种核心资源,并不完整)
–all-namespaces或-A:表示显示所有命名空间
–show-labels:显示所有标签
-l app:仅显示标签为app的资源
-l app=nginx:仅显示包含app标签,且值为nginx的资源
kubectl get componentstatuses
#componentstatues可以缩写成cs
kubectl get cs
kubectl get namespace
#namespace可以缩写成ns
kubectl get ns
kubectl get all [-n default]
由于deafult为缺省空间,当不指定命名空间时默认查看default命名空间
kubectl create ns lx
kubectl delete ns lx
kubectl create deployment nginx-test --image=nginx -n kube-public
kubectl describe deployment nginx-test -n kube-public
kubectl describe pod nginx-test -n kube-public
kubectl get pods -n kube-public
kubectl exec 可以跨主机登录容器,docker exec 只能在容器所在主机登录
kubectl exec -it nginx-test-795d659f45-gqbdn bash -n kube-public
由于存在 deployment/rc 之类的副本控制器,删除 pod 也会重新拉起来
kubectl delete pod nginx-test-795d659f45-gqbdn -n kube-public
kubectl get pod -n kube-public
kubectl delete pod [] -n [] --force --grace-period=0
grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅的退出,0表示立即终止pod
kubectl scale deployment nginx-test --replicas=3 -n kube-public
kubectl scale deployment nginx-test --replicas=1 -n kube-public
kubectl delete deployment nginx-test -n kube-public
kubectl label deployment nginx-test version=nginx1.14 -n kube-public
kubectl label deployment nginx-test version- -n kube-public
kubectl get deploy/nginx-test -o yaml -n kube-public
kubectl get service nginx -o yaml
kubectl explain deployment.metadata
kubectl explain service.metadata
修改yaml文件:并用kubectl apply -f xxxx.yaml文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源
kubectl get service nginx-service -o yaml > nginx-svc.yaml
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc
直接使用kubectl edit service nginx-service在线编辑配置资源清单并保存退出即时生效(如port: 888)
PS:此修改方式不会对yaml文件内容修改
kubectl edit service nginx-service
查看service资源
kubectl get svc
kubectl delete service nginx
kubectl delete -f nginx-svc.yaml
创建----发布----更新----回滚----删除
1、创建并运行一个或多个容器镜像
2、创建一个deployment或job管理容器
3、kubectl run --help查看使用帮助
启动nginx实例,暴露容器端口80,设置副本数3
kubectl run nginx-deployment --image=nginx:1.14 --port=80 --replicas=3
run报错:因为识别不了–replicas命令
k8sv1.18.0以后的版本, --replicas以后弃用该命令,推荐使用deployment创建pods
我用的是1.21.3版本
kubectl create deployment nginx-1 --image=nginx:1.14 --port=80 --replicas=3
将资源暴露为新的Service
为Deployment的nginx创建Service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
kubectl get pods,svc -o wide
kubectl get endpoints
kubectl describe svc nginx
curl 10.125.192.158
kubectl describe svc nginx | grep NodePort
curl 192.168.32.11:30255
kubectl logs []
更改现有应用资源一些信息
kubectl set --help查看使用帮助
kubectl set image --help获取
curl -I 192.168.32.11:30255
kubectl set image deployment/nginx nginx=nginx:1.15
处于动态监听pod状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后以此类推
kubectl get pods -w
注:更新规则可通过“kubetl describe deployment nginx”的“RollingUpdateStrategy”查看,默认配置为“25% max unavailable, 25% max surge”,即按照25%的比例进行滚动更新。
kubectl get pod -o wide
kubectl rollout history deployment/nginx
kubectl rollout undo deployment/nginx
kubectl get pods -o wide
curl -I 192.168.32.11:30255
查看历史版本
kubectl rollout history deployment/nginx
回到revison2,即1.15版本
kubectl rollout undo deployment/nginx --to-revision=2
查看当前nginx版本
kubectl rollout status deployment/nginx
kubectl delete deployment/nginx
kubectl delete svc/nginx-service
1、蓝绿发布
2、滚动发布
3、金丝雀发布
Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,在筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。
kubectl create deployment nginx-test --image=nginx:1.14 --replicas=3
kubectl get pods,deploy -o wide
kubectl expose deploy nginx-test --port=80 --target-port=80 --name=nginx-service --type=NodePort
kubectl get svc -o wide
curl -I 192.168.32.11:32179
kubectl describe deployment nginx-test | grep Image
在不定义CHANGE-CAUSE的情况下,缺省值为,当历史版本较多时,不便于咱们回滚时辨认版本号。因此,建议定义CHANGE-CAUSE为服务版本以帮助咱们辨认当前服务。
kubectl rollout history deploy/nginx-test
一般通过修改配置的方式定义change-cause
[root@master ~]# kubectl edit deploy/nginx-test
......
kind: Deployment
metadata:
annotations:
#下行可定义历史版本revision
deployment.kubernetes.io/revision: "1"
#在Deployment的matadata项下的annotations中如下行定义change-cause
kubernetes.io/change-cause: "nginx1.14"
......
kubectl rollout history deploy/nginx-test
kubectl set image deploy/nginx-test nginx=nginx:1.15 && kubectl rollout pause deploy/nginx-test
kubectl rollout status deploy/nginx-test
可以看到已经新增了一个pod,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令
kubectl get pods -w
curl -I 192.168.32.11:32179
kubectl rollout history deploy/nginx-test
[root@master ~]# kubectl edit deploy/nginx-test
kind: Deployment
metadata:
annotations:
#下行的revison自动更新为2
deployment.kubernetes.io/revision: "2"
#修改下行的change-cause为nginx1.15
kubernetes.io/change-cause: nginx1.15
测试新版本没问题继续更新
kubectl rollout resume deploy/nginx-test
kubectl get pods -w
这两个后更新