- 1. 陈述式管理方法
- 2. 声明式管理方法
- 3. kubectl命令大全
- 3.1. 基本命令 Basic Commands (Beginner):
- 3.2. 部署命令 Deploy Commands
- 3.3. 集群管理命令 Cluster Management Commands
- 3.4. 故障诊断和调试命令 Troubleshooting and Debugging Commands
- 3.5. 高级命令 Advanced Commands
- 3.6. 设置命令 Settings Commands
- 3.7. 其余命令 Other Commands
- 4. 特殊需求描述
- 陈述式管理方法 — 主要依赖命令行CLI工具进行管理
- 声明式管理方法 — 主要依赖统一资源配置清单(mainifest)配置
- GUI式管理方法 — 主要依赖图形化操作界面(Web页面)进行管理
1. 陈述式管理方法
1.1. 管理namespace(命名空间)
1.1.1. 查看命名空间
~]# kubectl get namespace~]# kubectl get nsNAME STATUS AGEdefault Active 7d7hkube-node-lease Active 7d7hkube-public Active 7d7hkube-system Active 7d7h
1.1.2. 查看名称空间内的资源
# 查看defualt命名空间所有的资源,默认为default, 可省略 -n default
~]# kubectl get all -n default
NAME READY STATUS RESTARTS AGE
pod/nginx-ds-8flhn 1/1 Running 0 6d2h
pod/nginx-ds-w4h22 1/1 Running 0 6d2h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 192.168.0.1 <none> 443/TCP 7d7h
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/nginx-ds 2 2 2 2 2 <none> 6d2h
1.1.3. 删除命名空间
~]# kubectl delete namespace app
~]# kubectl delete ns app
namespace "app" deleted
1.2. 管理deployment
1.2.1. 创建deployment
# 创建deployment资源,并放置在kube-public命名空间中, deployment 可简写为 deploy
~]# kubectl create deployment nginx-dp --image=harbor.odl.com/public/nginx:v1.7.9 -n kube-public
deployment.apps/nginx-dp created
1.2.2. 查看deployment
~]# kubectl get deploy -n kube-public
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-dp 1/1 1 1 16m
1.2.3. 扩展查看deployment
[root@hdss7-21 ~]# kubectl get deployment -n kube-public -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-dp 1/1 1 1 22m nginx harbor.odl.com/public/nginx:v1.7.9 app=nginx-dp
1.2.4. 详细查看deployment
~]# kubectl describe deployment nginx-dp -n kube-public
Name: nginx-dp
Namespace: kube-public
CreationTimestamp: Sun, 27 Sep 2020 00:15:01 +0800
Labels: app=nginx-dp
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=nginx-dp
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
# 默认为RollingUpdate 滚动发布
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx-dp
Containers:
nginx:
Image: harbor.odl.com/public/nginx:v1.7.9
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-dp-67df759898 (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 23m deployment-controller Scaled up replica set nginx-dp-67df759898 to 1
1.2.5. 查看pods
~]# kubectl get pods -n kube-public
NAME READY STATUS RESTARTS AGE
nginx-dp-67df759898-bhmmh 1/1 Running 0 53m <none> <none>
1.2.6. 进入pod资源
# 可跨主机访问
# 可使用docker exec进入容器
~]# kubectl exec -it nginx-dp-67df759898-bhmmh bash -n kube-public
root@nginx-dp-67df759898-bhmmh:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:07:16:03 brd ff:ff:ff:ff:ff:ff
inet 172.7.22.3/24 brd 172.7.22.255 scope global eth0
valid_lft forever preferred_lft forever
1.2.7. 删除pod资源(重启pod方法)
可使用watch命令观察pod重建的状态
强制删除参数: —force —grace-period=0
~]# kubectl get pods -n kube-public
NAME READY STATUS RESTARTS AGE
nginx-dp-67df759898-bhmmh 1/1 Running 0 63m
[root@hdss7-21 ~]# kubectl delete pods nginx-dp-67df759898-bhmmh -n kube-public
pod "nginx-dp-67df759898-bhmmh" deleted
[root@hdss7-21 ~]# kubectl get pods -n kube-public -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dp-67df759898-22ksd 1/1 Running 0 42s 172.7.21.3 hdss7-21.host.com <none> <none>
1.2.8. 删除deployment
~]# kubectl get deployment -n kube-public
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-dp 1/1 1 1 73m
~]# kubectl delete deployment nginx-dp -n kube-public
deployment.extensions "nginx-dp" deleted
~]# kubectl get deployment -n kube-public
No resources found.
1.2.9. 扩容deployment的pod副本数
缩容只要将—replicas=1 即可将副本数为1
~]# kubectl scale deployment nginx-dp --replicas=2 -n kube-public
deployment.extensions/nginx-dp scaled
~]# kubectl get deployment -n kube-public
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-dp 2/2 2 2 16m
~]# kubectl get pods -n kube-public
NAME READY STATUS RESTARTS AGE
nginx-dp-67df759898-x6qcw 1/1 Running 0 15m
nginx-dp-67df759898-zf7dr 1/1 Running 0 99s
1.3. 管理service
1.3.1. 创建service
# 先创建一个deployment
~]# kubectl create deployment nginx-dp --image=harbor.odl.com/public/nginx:v1.7.9 -n kube-public
deployment.apps/nginx-dp created
~]# kubectl get deployment -n kube-public
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-dp 1/1 1 1 13s
# 创建service资源,对外映射80端口
~]# kubectl expose deployment nginx-dp --port=80 -n kube-public
service/nginx-dp exposed
~]# kubectl get service -n kube-public
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dp ClusterIP 192.168.140.123 <none> 80/TCP 37s
~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.1:443 nq
-> 10.4.7.21:6443 Masq 1 0 0
-> 10.4.7.22:6443 Masq 1 0 0
TCP 192.168.140.123:80 nq
-> 172.7.21.3:80 Masq 1 0 0
1.3.2. 详细查看service
# 只能在运算节点PING通service的IP:192.168.140.123,不对外提供网络
~]# kubectl describe svc nginx-dp -n kube-public
Name: nginx-dp
Namespace: kube-public
Labels: app=nginx-dp
Annotations: <none>
Selector: app=nginx-dp
Type: ClusterIP
IP: 192.168.140.123
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 172.7.21.3:80
Session Affinity: None
Events: <none>
1.4. 总结
- kubernets集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口
- kubectl是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,,组织并转化为apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径
- kubectl帮助
- kubectl —help
- http://docs.kubernetes.org.cn
- kubectl —help
- 陈述式资源管理方法可以满足90%以上的资源管理需求,但缺点是
- 命令冗长, 复杂 难以记忆
- 特定场景下, 无法实现管理需求
- 对资源的增删查操作比较容易,改比较困难
- 命令冗长, 复杂 难以记忆
2. 声明式管理方法
声明式资源管理方法依赖于——- 资源配置清单(yaml / json)
2.1. 查看已有资源配置清单
~]# kubectl get pods -n kube-public
NAME READY STATUS RESTARTS AGE
nginx-dp-67df759898-x6qcw 1/1 Running 0 70m
~]# kubectl get pods nginx-dp-67df759898-x6qcw -o yaml -n kube-public
2.2. 查看资源配置清单帮助文档
~]# kubectl explain service.metadata
IND: Service
VERSION: v1
RESOURCE: metadata <Object>
DESCRIPTION:
Standard object's metadata. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
ObjectMeta is metadata that all persisted resources must have, which
includes all objects users must create.
2.3. 创建资源配置清单
~]# vim /root/nginx-ds-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-ds
name: nginx-ds
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-ds
sessionAffinity: None
type: ClusterIP
3. kubectl命令大全
3.1. 基本命令 Basic Commands (Beginner):
3.1.1. kubectl create
3.1.1.1. 以配置文件创建configmap资源
举例
# 以准备nginx.conf配置文件
kubectl create configmap nginx_example_conf --from-file=./nginx.conf
3.1.1.2. 命令行创建基础deployment的yaml模版文件
kubectl create deployment web --images=nginx --dry-run -o yaml > web.yaml
3.1.2. kubectl expose
3.1.2.1. 暴露端口
kubectl expose deployment web --port=80 --type=NodePort --target-port=8888 --name
3.1.3. kubectl run
3.1.4. kubectl set
kubectl set deployment web images=nginx:1.1.
3.1.5. kubectl explain
3.1.6. kubectl get
3.1.6.1. 查看各类资源并扩展信息
-o 参数可输出 wide json yaml的格式
[root@k8smaster ~]# kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
nginx-ds-79b7b45759-b6jrz 1/1 Running 3 3d18h
nginx-ds-79b7b45759-dzqrr 0/1 ImagePullBackOff 0 3d18h
nginx-ds-79b7b45759-xcbrl 1/1 Running 3 3d18h
[root@k8smaster ~]# kubectl get pods -n default -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-ds-79b7b45759-b6jrz 1/1 Running 3 3d18h 10.244.1.9 k8snode2 <none> <none>
nginx-ds-79b7b45759-dzqrr 0/1 ImagePullBackOff 0 3d18h 10.244.2.13 k8snode1 <none> <none>
nginx-ds-79b7b45759-xcbrl 1/1 Running 3 3d18h 10.244.1.10 k8snode2 <none> <none>
3.1.6.2. 查看几点
3.1.6.5. 实时查看资源情况
-w 参数 即使 —watch 实时查看资源信息
~]# kubectl get pods -w
NAME READY STATUS RESTARTS AGE
nginx-ds-5mt9m 1/1 Running 0 14d
nginx-ds-hpbbt 1/1 Running 0 30d
nginx-svc-94c67b89f-7854m 1/1 Running 0 28d
nginx-svc-94c67b89f-cx8fq 1/1 Running 0 14d
nginx-svc-94c67b89f-t4scz 1/1 Running 0 28d
nginx-svc-94c67b89f-vp9vm 1/1 Running 0 14d
3.1.7. kubectl edit
3.1.8. kubectl delete
3.1.8.1. 删除目录下所有yaml配置文件里面的资源
kubectl delete -f nginx/.
3.1.8.2 删除资源
kubectl delete deployemnt nginx-pods
3.2. 部署命令 Deploy Commands
3.2.1. kubectl rollout
3.2.1.1. 查看升级状态
kubectl rollout status deployment web
3.2.1.2. 查看升级版本历史
kubectl rollout history deployment web
3.2.1.3. 回滚版本
# 上一个版本
kubectl rollout
3.2.2. kubectl scale
3.3.3. kubectl autoscale
3.3. 集群管理命令 Cluster Management Commands
3.3.1. kubectl certificate
3.3.2. kubectl cluster-info
3.3.3. kubectl top
3.3.4. kubectl cordon
3.3.5. kubectl uncordon
3.3.6. kubectl drain
3.3.7. kubectl taint
3.4. 故障诊断和调试命令 Troubleshooting and Debugging Commands
3.4.1. kubectl describe
3.4.2. kubectl logs
3.4.3. kubectl attach
3.4.4. kubectl exec
3.4.4.1. 进入包含多个容器的pod
kubectl exec -it nginx-svc-7d44b56f8-7wjh8 -c filebeat -- /bin/bash
3.4.5. kubectl pro-forward
3.4.6. kubectl proxy
3.4.7. kubectl cp
3.4.8. kubectl auth
3.5. 高级命令 Advanced Commands
3.5.1. kubectl diff
3.5.2. kubectl apply
3.5.2. kubectl patch
3.5.3. kubectl replace
3.5.4. kubectl wait
3.5.5. kubectl convert
3.5.6. kubectl kustomize
3.6. 设置命令 Settings Commands
3.6.1. kubectl label
3.6.2. kubectl annotate
3.6.3. kubectl completion
3.7. 其余命令 Other Commands
3.7.1. kubectl alpha
3.7.2. kubectl api-resources
3.7.3. kubectl api-versions
3.7.4. kubectl config
3.7.4.1. 设置默认的namespace
kubectl config set-context $(kubectl config current-context) --namespace=kube-system
3.7.5. kubectl plugin
3.7.6. kubectl version
4. 特殊需求描述
4.1. 实时查看资源情况
-w 参数 即使 —watch 实时查看资源信息
~]# kubectl get pods -w
NAME READY STATUS RESTARTS AGE
nginx-ds-5mt9m 1/1 Running 0 14d
nginx-ds-hpbbt 1/1 Running 0 30d
nginx-svc-94c67b89f-7854m 1/1 Running 0 28d
nginx-svc-94c67b89f-cx8fq 1/1 Running 0 14d
nginx-svc-94c67b89f-t4scz 1/1 Running 0 28d
nginx-svc-94c67b89f-vp9vm 1/1 Running 0 14d
