zoukankan      html  css  js  c++  java
  • 【k8s】使用k8s部署一个简单的nginx服务

    名词解释

    Namespace 表示命名空间

    Deployment 表示pod发布

    Service 表示多个pod做为一组的集合对外通过服务的表示

    kubectl 是k8s的命令行操作命令,可以创建和更新,删除,列表和查详情等一系列的操作

    部署步骤

    同样的方法将deployment改成service,可以实现对service的增删该查等操作。 

    一、创建命名空间namespace

    1. 创建命名空间的yaml文件 nginx-namespace.yaml

    apiVersion: v1
    kind: Namespace
    metadata:
      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 namespaces
    NAME              STATUS   AGE
    default           Active   85d
    kube-node-lease   Active   85d
    kube-public       Active   85d
    kube-system       Active   85d
    nginx             Active   8d

    4. 查询命名空间nginx详情

    ➜  kube kubectl describe namespace nginx
    Name:         nginx
    Labels:       name=nginx
    Annotations:  <none>
    Status:       Active

    总结:

    从命名空间详情中可以看到如下信息

    命名空间名称: nginx

    命名空间的标签:name=nginx

    命名空间状态:Active 表示命名空间活跃

    二、创建nginx的发布Deployment

     1. 创建deployment的yaml文件 nginx-deployment.yaml

    ➜  kube cat nginx-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx
      name: nginx-deployment1
      namespace: nginx
    spec:
      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-deployment1

    metadata.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   AGE
    nginx-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   AGE
    nginx-deployment1-6cb86fb6b7-kkpbw   1/1     Running             5          7d20h
    nginx-deployment1-6cb86fb6b7-txkkj   0/1     ContainerCreating   0          1s
    nginx-deployment1-6cb86fb6b7-ztt2t   0/1     ContainerCreating   0          1s

    如上可以看到有两个新的pod处于容器创建中状态,容器创建成功后,状态会转移到Running,READY也会变成1/1

    减少pods节点从3个到1个如下

    # ➜  kube kubectl apply -f nginx-deployment.yaml
    deployment.apps/nginx-deployment1 configured
    # ➜  kube kubectl get pods -n nginx
    NAME                                 READY   STATUS        RESTARTS   AGE
    nginx-deployment1-6cb86fb6b7-d6z6l   1/1     Terminating   0          98s
    nginx-deployment1-6cb86fb6b7-kkpbw   1/1     Running       5          7d20h
    nginx-deployment1-6cb86fb6b7-qtx2v   1/1     Terminating   0          98s

    如上所示,有两个pod状态是终止中,只剩余一个处于Running状态

    4. 查询命名空间nginx下的发布deployment

    # ➜  kube kubectl describe deployment nginx -n nginx
    Name:                   nginx-deployment1
    Namespace:              nginx
    CreationTimestamp:      Thu, 30 Sep 2021 11:46:53 +0800
    Labels:                 app=nginx
    Annotations:            deployment.kubernetes.io/revision: 1
    Selector:               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 nginx
    Name:         nginx-deployment1-6cb86fb6b7-kkpbw
    Namespace:    nginx
    Priority:     0
    Node:         docker-desktop/192.168.65.4
    Start Time:   Thu, 30 Sep 2021 15:12:48 +0800
    Labels:       app=nginx
                  pod-template-hash=6cb86fb6b7
    Annotations:  <none>
    Status:       Running
    IP:           10.1.0.170
    # ...

     6. 删除一个deployment的pod节点

    # ➜  kube kubectl delete pod  nginx-deployment1-6cb86fb6b7-txkkj -n nginx
    pod "nginx-deployment1-6cb86fb6b7-txkkj" deleted

    三、创建nginx的服务Service

    1. 创建service的yaml文件 nginx-service.yaml

    # ➜  kube cat nginx-service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      labels:
       app: nginx
      name: nginx-deployment1
      namespace: nginx
    spec:
      ports:
      - port: 9000
        name: nginx-service80
        protocol: TCP
        targetPort: 80
        nodePort: 31090
      selector:
        app: nginx
      type: NodePort

    配置说明:

    kind: Service表示yaml文件创建的是一个Service

    metadata表示这个Service的元信息

    metadata.name 是Service的名称 nginx-deployment1

    metadata.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服务,因此选择协议为TCP
    sepc.ports.targetPort: 80 表示Service转发外部请求到容器的目标端口80,即deployment的pod容器对外开放的容器端口80
    sepc.ports.nodePort: 31090 表示Service对外开放的节点端口

    2. 创建一个服务

    # ➜  kube kubectl create -f nginx-service.yaml
    service/nginx-deployment1 created

    即可以使用浏览器打开这个端口的页面,如下

    4. 查询服务列表

    # ➜  kube kubectl get services -n nginx
    NAME                TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
    nginx-deployment1   NodePort   10.96.92.3   <none>        9000:31090/TCP   34s

    5. 查询服务详情

    # ➜  kube kubectl describe service nginx-deployment1 -n nginx
    Name:                     nginx-deployment1
    Namespace:                nginx
    Labels:                   app=nginx
    Annotations:              <none>
    Selector:                 app=nginx
    Type:                     NodePort
    IP:                       10.96.92.3
    LoadBalancer Ingress:     localhost
    Port:                     nginx-service80  9000/TCP
    TargetPort:               80/TCP
    NodePort:                 nginx-service80  31090/TCP
    Endpoints:                10.1.0.170:80,10.1.0.176:80,10.1.0.178:80
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:                   <none>

    6. 删除一个service服务

    # ➜  kube kubectl delete services nginx-deployment1 -n nginx
    service "nginx-deployment1" deleted

    如上就是通过k8s简单部署一个nginx服务的步骤

    其中包括如下步骤

    • 命名空间的创建
    • 标签的增加
    • deployment的pods发布,增加和减少pods的方法
    • 节点端口转发的Service创建
    • 删除一个服务
    • 删除一个pod

    done.

    祝玩的开心~

  • 相关阅读:
    linux 命令——48 watch (转)
    linux 命令——47 iostat (转)
    linux 命令——46 vmstat(转)
    linux 命令——45 free(转)
    linux 命令——44 top (转)
    linux 命令——43 killall(转)
    linux 命令——42 kill (转)
    linux 命令——41 ps(转)
    linux 命令——40 wc (转)
    Java for LeetCode 068 Text Justification
  • 原文地址:https://www.cnblogs.com/voipman/p/15378589.html
Copyright © 2011-2022 走看看