您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页【k8s】使用k8s部署一个简单的nginx服务

【k8s】使用k8s部署一个简单的nginx服务

来源:爱站旅游
【k8s】使⽤k8s部署⼀个简单的nginx服务

名词解释

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: Status: Active

总结:

从命名空间详情中可以看到如下信息命名空间名称: 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: Status: RunningIP: 10.1.0.170# ...

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 9000:31090/TCP 34s

5. 查询服务详情

# ➜ kube kubectl describe service nginx-deployment1 -n nginxName: nginx-deployment1Namespace: nginxLabels: app=nginxAnnotations: Selector: app=nginxType: NodePortIP: 10.96.92.3

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.祝玩的开⼼~

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务