k8s集群客户端工具kubectl | 字数总计: 1.8k | 阅读时长: 6分钟 | 阅读量: | 
子命令使用分类 
NameSpace(命名空间) 
作用:多租户情况下,实现资源隔离 
属于逻辑隔离 
属于管理边界 
不属于网络边界 
可以针对每个namespace做资源配额 
 
查看NameSpace 1 2 3 kubectl get namespace
名字 
说明 
 
 
default 
用户创建的pod默认在此命名空间 
 
kube-public 
所有用户均可以访问,包括未认证用户 
 
kube-node-lease 
集群节点租约状态,v1.13加入 
 
kube-system 
kubernetes集群系统内部使用的命名空间 
 
 
 
创建NameSpace 通过kubectl命令行创建
1 kubectl create namespace test   
通过应用资源清单文件创建:
准备资源清单文件01-create-ns.yaml
1 2 3 4 apiVersion:  v1 kind:  Namespace metadata: name:  test2 
应用资源清单文件
1 kubectl apply -f 01-create-ns.yaml
 
删除NameSpace 通过kubectl命令行删除
1 kubectl delete namespace test   
通过应用资源清单文件删除(使用和创建同样的资源文件):
1 kubectl delete -f 01-create-ns.yaml
Pod Pod是容器的封装,也是kubernetes集群能够调度的最小单元。
查看Pod 1 2 3 4 5 6 
创建Pod 由于网络原因,建议提前准备好容器镜像。本示例使用nginx:latest容器镜像。02-create-pod.yaml
1 2 3 4 5 6 7 8 9 10 11 apiVersion:  v1 kind:  Pod metadata: name:  pod1 spec: containers: -  name:  nginx-pod image:  nginx:latest  ports: -name:  nginxport containerPort:  80 
应用用于创建Pod资源清单文件
1 kubectl apply -f 02-create-pod.yaml
访问Pod 1 2 kubectl get pods -o wide   
删除Pod 1 2 kubectl delete pods pod1               
Controller(控制器) Controller(控制器),用于在k8s集群中以loop方式监视Pod状态,如果其发现Pod被删除,将会重新拉起一个Pod,以让Pod一直保持在用户期望状态。
控制器名称 
作用 
 
 
Deployment 
声明式更新控制器,用于发布无状态应用 
 
ReplicaSet 
副本集控制器,用于对Pod进行副本规模扩大或剪裁 
 
StatefulSet 
有状态副本集,用于发布有状态应用 
 
DaemonSet 
在k8s集群每一个Node上运行一个副本,用于发布监控或日志收集类等应用 
 
Job 
运行一次性作业任务 
 
CronJob 
运行周期性作业任务 
 
 
 
Deployment控制器 
具有上线部署、滚动升级、创建副本、回滚到以前某一版本(成功/ 稳定)等功能 
Deployment包含ReplicaSet,除非需要自定义升级功能或者根本不需要升级Pod,否则还是建议使用Deployment而不直接使用ReplicaSet。 
创建Deployment控制器类型应用 命令行创建:
1 2 3 4 5 6 kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=2
查看控制器:
1 2 3 4 5 6 7 8 9 10 11 
通过资源清单文件创建,编写用于创建Deployment控制器类型应用资源清单03-creat-deployment-app.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 apiVersion:  apps/v1 kind:  Deployment metadata: name:  nginx-apps labels: app:  nginx spec: replicas:  1 selector: matchLabels: app:  nginx template: metadata: labels: app:  nginx spec: containers: -  name:  nginxapp image:  nginx:latest imagePullPolicy:  IfNotPresent ports: -  containerPort:  80 
应用创建Deployment控制器类型应用资源清单
1 2 3 4 5 kubectl apply -f 03-creat-deployment-app.yaml
删除Deployment控制器类型应用 带有控制器类型的Pod不能随便删除,如果必须删除,请删除控制器类型的应用名称。
1 2 3 4 
Service Pod的状态不是人为控制的,Pod IP是在创建时分配的,如果在Pod被误删除,被Controller重新拉起一个新的Pod时,Pod IP地址是变化着的,如果访问必Pod则必须更换IP地址。这样对于大量的Pod运行应用来说,无法对Pod进行控制,因此在k8s集群中引入另一个概念Service。
Service不是实体服务,是一条iptables或ipvs的转发规则。
通过Service为Pod客户端提供访问Pod方法,即客户端访问Pod入口,Service通过Pod标签与Pod进行关联。
Service类型 
类型 
说明 
 
 
ClusterIP 
默认,分配一个集群内部可以访问的虚拟IP 
 
NodePort 
在每个Node上分配一个端口作为外部访问入口 
 
LoadBalancer 
工作在特定的Cloud Provider上,例如Google Cloud,AWS,OpenStack 
 
ExternalName 
表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信 
 
 
 
Service参数 
参数 
说明 
 
 
port 
访问Service使用的端口 
 
targetPort 
Pod中容器端口 
 
NodePort 
通过Node实现外网用户访问k8s集群内Service(30000-32767) 
 
 
 
Service创建 通过命令行创建:
1 2 3 4 5 6 7 8 9 10 11 type =ClusterIP --target-port=80 --port=80
访问Service以实现访问Pod目的:
1 2 3 4 
通过资源清单YAML文件创建,编写用于创建ClusterIP类型Service资源清单文件create-deployment-service-clusterip.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 apiVersion:  apps/v1 kind:  Deployment metadata: name:  nginx-apps labels: app:  nginx spec: replicas:  1 selector: matchLabels: app:  nginx template: metadata: labels: app:  nginx spec: containers: -  name:  nginxapp image:  nginx:latest imagePullPolicy:  IfNotPresent ports: -  containerPort:  80 ---  apiVersion:  v1 kind:  Service metadata: name:  nginx-apps spec: type:  ClusterIP selector: app:  nginx ports: -  protocol:  TCP port:  80 targetPort:  80 
应用用于创建Service资源清单文件
1 kubectl apply -f create-deployment-service-clusterip.yaml
基于资源清单YAML文件创建NodePort类型Service,create-deployment-service-nodeport.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 apiVersion:  apps/v1 kind:  Deployment metadata: name:  nginx-apps labels: app:  nginx spec: replicas:  1 selector: matchLabels: app:  nginx template: metadata: labels: app:  nginx spec: containers: -  name:  nginxapp image:  nginx:latest imagePullPolicy:  IfNotPresent ports: -  containerPort:  80 ---  apiVersion:  v1 kind:  Service metadata: name:  nginx-apps spec: type:  NodePort selector: app:  nginx ports: -  protocol:  TCP nodePort:  30001 port:  80 targetPort:  80 
验证资源对象创建情况
1 2 3 4 ":30001" 
在k8s集群外访问Service,在物理机浏览器中访问即可验证。
Service删除 1 2 3 4