一、kubectl --help帮助文档介绍
[root@master01 dashboard]# kubectl --help
Basic Commands (Beginner):
create Create a resource from a file or from stdin.根据文件或者输入流创建资源
expose 使用 replication controller, service, deployment 或者 pod并暴露它作为一个新的 Kubernetes Service
run 在集群中运行一个指定的镜像
set 为 objects 设置一个指定的特征
Basic Commands (Intermediate):
explain 查看资源的文档
get 显示一个或更多 resources
edit 在服务器上编辑一个资源
delete Delete resources by filenames, stdin, resources and names, or by resources and label selector
Deploy Commands:
rollout Manage the rollout of a resource;回滚,如果更新出问题了可以立马回滚
scale 为 Deployment, ReplicaSet, Replication Controller 或者 Job 设置一个新的副本数量;
弹性伸缩,特别是无状态的web服务
autoscale 自动调整一个 Deployment, ReplicaSet, 或者ReplicationController的副本数量;自动弹性伸缩
Cluster Management Commands:
certificate 修改 certificate 资源.(比如同意node节点加入时)
cluster-info 显示集群信息
top Display Resource (CPU/Memory/Storage) usage.动态查看资源使用情况
cordon 标记 node 为 unschedulable
uncordon 标记 node 为 schedulable
drain Drain node in preparation for maintenance;节点维护时
taint 更新一个或者多个node 上的 taints;污点 --一旦某个node被标记污点,就不会在这个节点上创建pod了
Troubleshooting and Debugging Commands:
describe 显示一个指定 resource 或者 group 的 resources 详情 --排障
logs 输出容器在 pod 中的日志 --排障
attach 连接到一个运行中的container
exec 进入container中执行命令
port-forward Forward one or more local ports to a pod;端口转发
proxy 运行一个 proxy 到 Kubernetes API server
cp 复制 files 和 directories 到 containers,和从容器中复制 files 和 directories.
auth 验证
Advanced Commands:
apply 通过文件名或标准输入流(stdin)对资源进行配置;资源创建、重新部署,更新
patch 使用 strategic merge patch 更新一个资源的 field(s)
replace 通过 filename 或者 stdin替换一个资源
wait Experimental: Wait for a specific condition on one or many resources.
convert 在不同的 API versions 转换配置文件
Settings Commands:
label 更新在这个资源上的 labels
annotate 更新一个资源的注释
completion Output shell completion code for the specified shell (bash or zsh);输出shell代码到指定的终端上
Other Commands:
alpha Commands for features in alpha
api-resources Print the supported API resources on the server;可以看到哪些资源可以缩写
api-versions Print the supported API versions on the server, in the form of "group/version"
config 修改 kubeconfig 文件
plugin Provides utilities for interacting with plugins.
version 输出 client 和 server 的版本信息
二、完整项目周期实例
项目的生命周期,创建–》发布–》更新–》回滚–》删除
1.创建nginx
[root@master01 ~]# kubectl run nginx-test --image=nginx --port=80 --replicas=3
[root@master01 ~]# kubectl get all #等于kubectl get pods,svc,deployment,replicaset
2.发布nginx #可以再为service提供负载均衡的功能
[root@master01 ~]# kubectl expose deployment nginx-test --port=80 --target-port=80 --name=nginx-service --type=NodePort #为nginx服务开放NodePort类型的端口
service/nginx-service exposed
pod是一组容器的集合,有四种端口
节点端口:nodeport
pod端口:port
容器发布端口:targetport
容器内部端口:containerport
[root@master01 ~]# kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 18h <none>
nginx-service NodePort 10.0.0.86 <none> 80:31641/TCP 44s run=nginx-test
#查看资源对象简写(选取了常用的部分内容)
[root@master02 ~]# kubectl api-resources
NAME SHORTNAMES APIGROUP NAMESPACED KIND
endpoints ep true Endpoints
events ev true Event
namespaces ns false Namespace
nodes no false Node
pods po true Pod
replicationcontrollers rc true ReplicationController
resourcequotas quota true ResourceQuota
services svc true Service
deployments deploy apps true Deployment
replicasets rs apps true ReplicaSet
certificatesigningrequests csr certificates.k8s.io false
events ev events.k8s.io true Event
deployments deploy extensions true Deployment
replicasets rs extensions true ReplicaSet
#查看终端节点的IP和端口
[root@master02 ~]# kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 14.0.0.80:6443 22h
nginx-service 172.17.29.4:80,172.17.29.5:80,172.17.42.3:80 4h29m
#查看网络状态详细信息
[root@master02 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
nginx-test-7fcfb6488c-kfstr 1/1 Running 0 4h43m 172.17.29.5 14.0.0.60 <none>
nginx-test-7fcfb6488c-vqmw6 1/1 Running 0 4h43m 172.17.42.3 14.0.0.70 <none>
nginx-test-7fcfb6488c-zhptn 1/1 Running 0 4h43m 172.17.29.4 14.0.0.60 <none>
#查看服务暴露的端口(随机)
[root@master02 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 22h
nginx-service NodePort 10.0.0.86 <none> 80:31641/TCP 4h32m
//在node01操作,查看负载均衡端口31641
//kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引入了ipvs模式
[root@node01 ~]# yum -y install ipvsadm
[root@node01 ~]# ipvsadm -L -n #能够看到另一个node中的pod是因为装了flannel网络组件
TCP 14.0.0.60:31641 rr
-> 172.17.29.4:80 Masq 1 0 0
-> 172.17.29.5:80 Masq 1 0 0
-> 172.17.42.3:80 Masq 1 0 0
//在node02操作 同样安装ipvsadmin工具查看
[root@node02 ~]# ipvsadm -L -n
TCP 14.0.0.70:31641 rr
-> 172.17.29.4:80 Masq 1 0 0
-> 172.17.29.5:80 Masq 1 0 0
-> 172.17.42.3:80 Masq 1 0 0
//在master01操作,查看访问日志
[root@master02 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
nginx-test-7fcfb6488c-kfstr 1/1 Running 0 4h55m 172.17.29.5 14.0.0.60 <none>
nginx-test-7fcfb6488c-vqmw6 1/1 Running 0 4h55m 172.17.42.3 14.0.0.70 <none>
nginx-test-7fcfb6488c-zhptn 1/1 Running 0 4h55m 172.17.29.4 14.0.0.60 <none>
[root@master02 ~]# kubectl logs nginx-test-7fcfb6488c-zhptn
2020/10/09 14:17:47 [error] 28#28: *2 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.29.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "14.0.0.60:31641" #访问14.0.0.60:31641产生的日志
172.17.29.1 - - [09/Oct/2020:14:17:47 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
172.17.29.1 - - [09/Oct/2020:14:18:28 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
172.17.29.1 - - [09/Oct/2020:14:18:28 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
172.17.42.0 - - [09/Oct/2020:14:20:09 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
2020/10/09 14:20:09 [error] 28#28: *3 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.42.0, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "14.0.0.70:31641" #访问14.0.0.70:31641产生的日志
172.17.42.0 - - [09/Oct/2020:14:20:09 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
172.17.42.0 - - [09/Oct/2020:14:20:11 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
172.17.42.0 - - [09/Oct/2020:14:20:11 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
3.更新nginx为1.14版本
谷歌浏览器按F12刷新页面查看nginx版本信息
#获取修改模板
[root@master02 ~]# kubectl set --help
[root@master02 ~]# kubectl set image --help
Examples:
# Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox
container image to 'busybox'.
kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
[root@master02 ~]# kubectl set image deployment/nginx-test nginx-test=nginx:1.14
deployment.extensions/nginx-test image updated
[root@master02 ~]# kubectl get pods -w #动态查看更新过程
NAME READY STATUS RESTARTS AGE
nginx-test-7fcfb6488c-kfstr 1/1 Running 0 5h23m
nginx-test-7fcfb6488c-vqmw6 1/1 Running 0 5h23m
nginx-test-7fcfb6488c-zhptn 1/1 Running 0 5h23m
nginx-test-b884fcd65-65tkj 0/1 ContainerCreating 0 9s
nginx-test-b884fcd65-65tkj 1/1 Running 0 11s
nginx-test-7fcfb6488c-kfstr 1/1 Terminating 0 5h23m
nginx-test-b884fcd65-8sv8h 0/1 Pending 0 0s
nginx-test-b884fcd65-8sv8h 0/1 Pending 0 1s
nginx-test-b884fcd65-8sv8h 0/1 ContainerCreating 0 1s
nginx-test-7fcfb6488c-kfstr 0/1 Terminating 0 5h23m
nginx-test-7fcfb6488c-kfstr 0/1 Terminating 0 5h23m
nginx-test-7fcfb6488c-kfstr 0/1 Terminating 0 5h23m
nginx-test-b884fcd65-8sv8h 1/1 Running 0 11s
nginx-test-7fcfb6488c-vqmw6 1/1 Terminating 0 5h24m
nginx-test-b884fcd65-g5szj 0/1 Pending 0 0s
nginx-test-b884fcd65-g5szj 0/1 Pending 0 0s
nginx-test-b884fcd65-g5szj 0/1 ContainerCreating 0 0s
nginx-test-7fcfb6488c-vqmw6 0/1 Terminating 0 5h24m
nginx-test-7fcfb6488c-vqmw6 0/1 Terminating 0 5h24m
nginx-test-7fcfb6488c-vqmw6 0/1 Terminating 0 5h24m
nginx-test-7fcfb6488c-vqmw6 0/1 Terminating 0 5h24m
nginx-test-b884fcd65-g5szj 1/1 Running 0 17s
nginx-test-7fcfb6488c-zhptn 1/1 Terminating 0 5h24m
nginx-test-7fcfb6488c-zhptn 0/1 Terminating 0 5h24m
nginx-test-7fcfb6488c-zhptn 0/1 Terminating 0 5h24m
nginx-test-7fcfb6488c-zhptn 0/1 Terminating 0 5h24m
业务更新:采用滚动更新的方式:先创建一个新的,等running以后再终止一个旧的(因为要维持副本数不变)
#谷歌浏览器上刷新页面,发现成功更新版本为1.14版本
4.回滚nginx
[root@master02 ~]# kubectl rollout --help
Examples:
# Rollback to the previous deployment
kubectl rollout undo deployment/abc
Available Commands:
history 显示 rollout 历史
pause 标记提供的 resource 为中止状态
resume 继续一个停止的 resource
status 显示 rollout 的状态
undo 撤销上一次的 rollout
Usage:
kubectl rollout SUBCOMMAND [options]
[root@master02 ~]# kubectl rollout history deployment/nginx-test #查看历史版本
deployment.extensions/nginx-test
REVISION CHANGE-CAUSE
1 <none>
2 <none>
[root@master02 ~]# kubectl rollout undo deployment/nginx-test #执行回滚
deployment.extensions/nginx-test
#同样是先创建一个新的,再删除一个旧的pod
[root@master02 ~]# kubectl rollout status deployment/nginx-test #查看回滚执行状态
deployment "nginx-test" successfully rolled out
5.删除nginx
#查看deployment
[root@master02 ~]# kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-test 3 3 3 3 5h43m
#删除控制器才能彻底删除(除了svc资源)
[root@master02 ~]# kubectl delete deploy/nginx-test
deployment.extensions "nginx-test" deleted
[root@master02 ~]# kubectl get pods,deploy,rs
No resources found.
[root@master02 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 23h
nginx-service NodePort 10.0.0.86 <none> 80:31641/TCP 5h34m
#删除服务svc
[root@master02 ~]# kubectl delete svc/nginx-service
service "nginx-service" deleted
#查看资源的详细信息
[root@master02 ~]# kubectl describe pod nginx-dbddb74b8-5j5nx
Name: nginx-dbddb74b8-5j5nx
Namespace: default
Priority: 0
PriorityClassName: <none>
Node: 14.0.0.60/14.0.0.60
Start Time: Fri, 09 Oct 2020 23:09:32 +0800
Labels: pod-template-hash=dbddb74b8
run=nginx
Annotations: <none>
Status: Running
IP: 172.17.29.2
Controlled By: ReplicaSet/nginx-dbddb74b8
Containers:
nginx:
Container ID: docker://9bf37a4d6541a337b3019c940283bbaf45483f3b990d7733ec9e1539a7d21bd2
Image: nginx
Image ID: docker-pullable://nginx@sha256:fc66cdef5ca33809823182c9c5d72ea86fd2cef7713cf3363e1a0b12a5d77500
Port: <none>
Host Port: <none>
State: Running
Started: Fri, 09 Oct 2020 23:09:34 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-dzqfg (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-dzqfg:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-dzqfg
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Events: #显示了pod创建的每步详细信息
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 37s default-scheduler Successfully assigned default/nginx-dbddb74b8-5j5nx to 14.0.0.60 #scheduler调度pod创建到哪个节点上
Normal Pulling 37s kubelet, 14.0.0.60 pulling image "nginx" #下载镜像
Normal Pulled 35s kubelet, 14.0.0.60 Successfully pulled image "nginx"
Normal Created 35s kubelet, 14.0.0.60 Created container #创建容器
Normal Started 35s kubelet, 14.0.0.60 Started container
#查看deployment控制器资源
[root@master02 ~]# kubectl describe deployment.apps/nginx
Name: nginx
Namespace: default
CreationTimestamp: Fri, 09 Oct 2020 23:09:32 +0800
Labels: run=nginx
Annotations: deployment.kubernetes.io/revision: 1
Selector: run=nginx
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: run=nginx
Containers:
nginx:
Image: nginx
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-dbddb74b8 (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 5m49s deployment-controller Scaled up replica set nginx-dbddb74b8 to 1
#处理集群中常规后台任务,一个资源对应一个控制器,控制器定义资源的类型,而controller-manager就是负责管理这些控制器的;维持副本期望的数目
[root@master02 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-dbddb74b8-5j5nx 1/1 Running 0 9m36s
#进入pod
[root@master02 ~]# kubectl exec -it nginx-dbddb74b8-5j5nx bash