名词解释
Namespace 表⽰命名空间Deployment 表⽰pod发布
Service 表⽰多个pod做为⼀组的集合对外通过服务的表⽰
kubectl 是k8s的命令⾏操作命令,可以创建和更新,删除,列表和查详情等⼀系列的操作
部署步骤
同样的⽅法将deployment改成service,可以实现对service的增删该查等操作。
⼀、创建命名空间namespace
1. 创建命名空间的yaml⽂件 nginx-namespace.yaml
apiVersion: v1kind: Namespacemetadata: name: nginx labels:
name: nginx
配置说明:
kind:Namespace 表⽰yaml⽂件创建的是命名空间metadata表⽰命名空间的元信息
metadata.name 是命名空间的名称 取值nginx
metadata.labels 是命名空间的标签 name=nginx
2. 创建命名空间nginx
kubectl create -f nginx-namespace.yaml
3. 查询命名空间
# 查询所有命名空间,可以看到新创建的命名空间nginx➜ kube kubectl get namespacesNAME STATUS AGEdefault Active 85dkube-node-lease Active 85dkube-public Active 85dkube-system Active 85dnginx Active 8d
4. 查询命名空间nginx详情
➜ kube kubectl describe namespace nginxName: nginx
Labels: name=nginxAnnotations: 总结: 从命名空间详情中可以看到如下信息命名空间名称: nginx命名空间的标签:name=nginx 命名空间状态:Active 表⽰命名空间活跃 ⼆、创建nginx的发布Deployment 1. 创建deployment的yaml⽂件 nginx-deployment.yaml ➜ kube cat nginx-deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: labels: app: nginx name: nginx-deployment1 namespace: nginxspec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx:1.14.0 ports: - containerPort: 80 name: nginx volumeMounts: - name: conf mountPath: /etc/nginx/nginx.conf - name: log mountPath: /var/log/nginx - name: html mountPath: /etc/nginx/html tolerations: - key: \"key\" operator: \"Equal\" value: \"nginx\" effect: \"NoSchedule\" volumes: - name: conf hostPath: path: /Users/w/kube/nginx/conf/nginx.conf - name: log hostPath: path: /Users/w/kube/nginx/logs type: Directory - name: html hostPath: path: /Users/w/kube/nginx/html type: Directory 配置说明: kind: Deployment表⽰yaml⽂件创建的是⼀个Deployment发布metadata表⽰这个deployment的元信息 metadata.name 是deployment的名称 nginx-deployment1metadata.labels 是deployment的标签 即:app=nginx metadata.namespace 是deployment的命名空间,此处选择的是第⼀步创建的命名空间nginx spec: 表⽰deployment的详细参数配置说明spec.replicas 是启动⼏个pod节点 spec.template.spec 是deployment选择模块的详细说明 spec.template.spec.containers 表⽰选择的容器是什么,此处是nginx的docker镜像 nginx:1.14.0,容器的端⼝设置 containerPort:80, volumeMounts表⽰绑定的⽂件和⽬录 spec.template.spec.volumes 表⽰选择的容器挂载的宿主机的⽂件和⽬录 conf, log和html 2. 创建deployment的nginx kubectl create -f nginx-deployment.yaml 3. 查询nginx命名空间下的pods # ➜ kube kubectl get pods -n nginx NAME READY STATUS RESTARTS AGEnginx-deployment1-6cb86fb6b7-kkpbw 1/1 Running 5 7d20h 可以看到有⼀个nginx-deployment的pods, 启动了1个pods运⾏Running状态可以通过修改如上yaml⽂件的spec.replicas启动多个pods,增加pods节点从1个到3个如下spec.replicas: 3 # ➜ kube kubectl get pods -n nginx NAME READY STATUS RESTARTS AGEnginx-deployment1-6cb86fb6b7-kkpbw 1/1 Running 5 7d20hnginx-deployment1-6cb86fb6b7-txkkj 0/1 ContainerCreating 0 1snginx-deployment1-6cb86fb6b7-ztt2t 0/1 ContainerCreating 0 1s 如上可以看到有两个新的pod处于容器创建中状态,容器创建成功后,状态会转移到Running,READY也会变成1/1 减少pods节点从3个到1个如下 # ➜ kube kubectl apply -f nginx-deployment.yamldeployment.apps/nginx-deployment1 configured# ➜ kube kubectl get pods -n nginx NAME READY STATUS RESTARTS AGEnginx-deployment1-6cb86fb6b7-d6z6l 1/1 Terminating 0 98snginx-deployment1-6cb86fb6b7-kkpbw 1/1 Running 5 7d20hnginx-deployment1-6cb86fb6b7-qtx2v 1/1 Terminating 0 98s 如上所⽰,有两个pod状态是终⽌中,只剩余⼀个处于Running状态 4. 查询命名空间nginx下的发布deployment # ➜ kube kubectl describe deployment nginx -n nginxName: nginx-deployment1Namespace: nginx CreationTimestamp: Thu, 30 Sep 2021 11:46:53 +0800Labels: app=nginx Annotations: deployment.kubernetes.io/revision: 1Selector: app=nginx Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable# ... 可以看到pods节点是1个。 5. 查询命名空间nginx下的发布pod详情 # ➜ kube kubectl describe pod nginx-deployment1-6cb86fb6b7-kkpbw -n nginxName: nginx-deployment1-6cb86fb6b7-kkpbwNamespace: nginxPriority: 0 Node: docker-desktop/192.168.65.4 Start Time: Thu, 30 Sep 2021 15:12:48 +0800Labels: app=nginx pod-template-hash=6cb86fb6b7Annotations: 6. 删除⼀个deployment的pod节点 # ➜ kube kubectl delete pod nginx-deployment1-6cb86fb6b7-txkkj -n nginxpod \"nginx-deployment1-6cb86fb6b7-txkkj\" deleted 三、创建nginx的服务Service 1. 创建service的yaml⽂件 nginx-service.yaml # ➜ kube cat nginx-service.yamlapiVersion: v1kind: Servicemetadata: labels: app: nginx name: nginx-deployment1 namespace: nginxspec: ports: - port: 9000 name: nginx-service80 protocol: TCP targetPort: 80 nodePort: 31090 selector: app: nginx type: NodePort 配置说明: kind: Service表⽰yaml⽂件创建的是⼀个Servicemetadata表⽰这个Service的元信息 metadata.name 是Service的名称 nginx-deployment1metadata.labels 是Service的标签 即:app=nginx metadata.namespace 是Service的命名空间,此处选择的是第⼀步创建的命名空间nginx sepc是Service的详细配置说明 sepc.type 取值NodePort 表⽰这个Service的类型是⼀个节点端⼝转发类型sepc.selector 表⽰这个Service是将带标签的哪些pods做为⼀个集合对外通过服务 sepc.ports.port 是Service绑定的端⼝ sepc.ports.name: nginx-service80 表⽰Service服务的名称 sepc.ports.protocol: TCP 表⽰Service转发请求到容器的协议是TCP,我们部署的http的nginx服务,因此选择协议为TCPsepc.ports.targetPort: 80 表⽰Service转发外部请求到容器的⽬标端⼝80,即deployment的pod容器对外开放的容器端⼝80sepc.ports.nodePort: 31090 表⽰Service对外开放的节点端⼝ 2. 创建⼀个服务 # ➜ kube kubectl create -f nginx-service.yamlservice/nginx-deployment1 created 即可以使⽤浏览器打开这个端⼝的页⾯,如下 4. 查询服务列表 # ➜ kube kubectl get services -n nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEnginx-deployment1 NodePort 10.96.92.3 5. 查询服务详情 # ➜ kube kubectl describe service nginx-deployment1 -n nginxName: nginx-deployment1Namespace: nginxLabels: app=nginxAnnotations: LoadBalancer Ingress: localhost Port: nginx-service80 9000/TCPTargetPort: 80/TCP NodePort: nginx-service80 31090/TCP Endpoints: 10.1.0.170:80,10.1.0.176:80,10.1.0.178:80Session Affinity: NoneExternal Traffic Policy: ClusterEvents: 6. 删除⼀个service服务 # ➜ kube kubectl delete services nginx-deployment1 -n nginxservice \"nginx-deployment1\" deleted 如上就是通过k8s简单部署⼀个nginx服务的步骤其中包括如下步骤 命名空间的创建标签的增加 deployment的pods发布,增加和减少pods的⽅法节点端⼝转发的Service创建删除⼀个服务删除⼀个pod done.祝玩的开⼼~ 因篇幅问题不能全部显示,请点此查看更多更全内容