k8s集群客户端工具kubectl | 字数总计: 1.8k | 阅读时长: 6分钟 | 阅读量: |
子命令使用分类
NameSpace(命名空间)
作用:多租户情况下,实现资源隔离
属于逻辑隔离
属于管理边界
不属于网络边界
可以针对每个namespace做资源配额
查看NameSpace 1 2 3 kubectl get namespace kubectl get ns
名字
说明
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 kubectl get pod kubectl get pods kubectl get pods --namespace kube-system kubectl get pod -n kube-system
创建Pod 由于网络原因,建议提前准备好容器镜像。本示例使用nginx:latest
容器镜像。 编写用于创建Pod资源清单文件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 curl http://172.16.1.2
删除Pod 1 2 kubectl delete pods pod1 kubectl delete -f 02-create-pod.yaml
Controller(控制器) Controller(控制器),用于在k8s集群中以loop方式监视Pod状态,如果其发现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 kubectl get deployment.apps kubectl get replicaset kubectl get pods kubectl get pods -o wide curl http://172.16.xxx.xx curl http://172.16.xxx.xx
通过资源清单文件创建,编写用于创建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 kubectl get deployment.apps kubectl get replicaset.apps
删除Deployment控制器类型应用 带有控制器类型的Pod不能随便删除,如果必须删除,请删除控制器类型的应用名称。
1 2 3 4 kubectl delete deployment.apps nginx-app kubectl delete -f 03-creat-deployment-app.yaml
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 kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=1 kubectl expose deployment.apps nginx-app --type =ClusterIP --target-port=80 --port=80
访问Service以实现访问Pod目的:
1 2 3 4 kubectl get service curl http://10.109.21.171
通过资源清单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 kubectl get service ss -anput | grep ":30001"
在k8s集群外访问Service,在物理机浏览器中访问即可验证。
Service删除 1 2 3 4 kubectl delete service nginx-app kubectl delete -f create-deployment-service-clusterip.yaml