kubectl资源管理入门
资源的CURD
核心资源管理方式
- 陈述式管理方法
主要依赖命令行CLI工具进行管理 - 声明式管理方法
主要依赖统一资源配置清单(manifest)进行管理 - GUI式管理方法
主要依赖图形化操作界面(web页面)进行管理,如dashborard
三种方式互相依托,协同工作
通过kubectl命令管理资源(陈述式)
get、create、describe、delete、exec、expose、scale、…
更多命令查看kubectl -h
,查看http://docs.kubernetes.org.cn
下文通过部分操作大致了解一下资源增删改查的操作
-
namespace
kubectl get namespace
或kubectl get ns
查询命名空间
kubectl create ns hzwns
创建命名空间,名称为hzwns
kubectl describe ns hzwns
describe查看命名空间的详细信息
kubectl get all
等同kubectl get all -n default
查询default命名空间下的所有资源
kubectl delete ns hzwns
删除名称为hzwns的namespace -
deployment
kubectl create deployment nginx-dp --image=harbor.hzwod.com/public/nginx:1.19.8 -n hzwns
在名称空间hzwns中创建一个deployment资源
kubectl create deployment .... --dry-run -o yaml
生成资源的配置文件--dry-run
:空运行不部署资源,不加这个参数资源会被部署;-o yaml
:指定资源配置文件格式
(此yaml文件实际上就是声明式资源)
kubectl create -f xxxx.yaml
按资源配置文件创建资源
kubectl describe deploy nginx-dp -n hzwns
查看deployment的详情描述(deployment可以简写成deploy)
kubectl delete pod nginx-dp-xxxxxx -n hzwns
删除deployment定义创建的pod,但pod控制器会重新拉起新的pod,相当于重启了pod
可以通过
kubectl exec -it nginx-dp-67ff6b97bf-zd2l9 bash -n hzwns
kubectl scale deployment nginx-dp --replicas=2 -n hzwns
将deployment:nginx-dp 扩容到2
kubectl scale deployment nginx-dp --replicas=1 -n hzwns
缩容到1
通过describe查看deployment事件
- service
kubectl get servcie
或kubectl get svc
kubectl expose deployment nginx-dp --port=80 -n hzwns
将deployment资源nginx-dp暴露为service
kubectl expose deployment nginx-dp --port=88 --target-port=80 -n hzwns
将deployment资源nginx-dp 80端口暴露为service 88端口
kubectl expose
将资源暴露为新的Kubernetes Service。
指定deployment、service、replica set、replication controller或pod ,并使用该资源的选择器作为指定端口上新服务的选择器。deployment 或 replica set只有当其选择器可转换为service支持的选择器时,即当选择器仅包含matchLabels组件时才会作为暴露新的Service。
kubectl get svc -n hzwns -o wide
ipvsadm -Ln
此时集群内部通过192.168.65.221就能访问nginx-dp内的pod
此时还是有问题,上图显示172.20.21.2是node21上的pod,此时若在node22上通过192.168.65.221去访问是不通的(应为跨主机了,跨主机网络还未解决)
- 陈述式资源管理小结
- kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口
- kubectl是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理K8S各种资源的一种有效途径
- kubectl的命令:
kubectl --help
、在线资源:http://docs.kubernetes.org.cn - 陈述式资源管理方法可以满足90%以上的资源管理需求,但也存在缺点:
- 命令冗长、复杂、难以记忆
- 特定场景下无法实现管理需求(如给ds类型资源使用expose暴露服务就不支持)
- 对资源的
增、删、查
操作比较容易,改
就很痛苦
声明式资源管理
-
通过陈述式命令生成资源声明文件
kubectl create deployment nginx-dp --image=harbor.hzwod.com/public/nginx:1.19.8 -n hzwns --dry-run -o yaml
--dry-run
:空运行不部署资源,不加这个参数资源会被部署哦;
-o yaml
:指定资源配置文件格式(可选yaml
、json
) -
查询已存在资源生成声明文件
kubectl get svc -n hzwns -o yaml
[root@node21 ~]# kubectl get svc -n hzwns
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dp ClusterIP 192.168.65.221 <none> 80/TCP 2d15h
[root@node21 ~]# kubectl get svc nginx-dp -n hzwns -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2021-03-26T16:55:05Z"
labels:
app: nginx-dp
name: nginx-dp
namespace: hzwns
resourceVersion: "348279"
selfLink: /api/v1/namespaces/hzwns/services/nginx-dp
uid: 8105353c-068b-4a6c-884a-08d3fe409c19
spec:
clusterIP: 192.168.65.221
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-dp
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
-
配置文件各域的内容
kubectl explain
kubectl explain service.spec
查看spec域的配置项及说明
kubectl explain service.metadata
查看metadata域的配置项及说明 -
编辑配置
- 离线方式(建议方式)
通过-o yaml
将现存资源配置导出,进行修改,再通过kubectl apply -f xxx.yaml
更新配置 - 在线方式
kubectl edit svc nginx-dp -n hzwns
跳入vi直接修改配置文件,保存生效
- 离线方式(建议方式)
-
删除资源
kubectl delete -f nginx-dp_svc-hzwns.yaml -n hzwns
kubectl delete service nginx-dp -n hzwns
-
声明式资源管理小结
- 声明式资源管理方法,依赖于统一资源配置清单文件对资源进行管理
- 对资源的管理,是通过事前定义在统一资源配置清单内,再通过陈述式命令(见下一行)应用到K8S集群里
- 语法格式:
kubectl create/apply/delete -f /pathtoyaml
- 资源配置清单的学习方法
- 欣赏官方案例,如https://docs.projectcalico.org/v3.7/manifests/calico.yaml-calico官方资源配置清单
- 善用
kubectl explain
- 使用陈述式命令生成配置文件,观察配置。
kuectl create ... --dry-run -o yaml