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