• Kubernetes入门(三)——使用Deployment运行一个无状态应用


    Kubernetes集群搭建完成后,开始尝试部署一个"Hello World"的简单应用,据此了解Kubernetes的应用部署流程,熟悉yaml文件的核心配置。本文在Kubernetes集群部署了一个Nginx应用,并使用service把应用暴露给外部访问。以下是具体操作步骤,希望能给初学者提供一些参考。

    1. 创建一个nginx deployment

    • YAML文件描述一个运行nginx:1.19.1 Docker镜像的Deployment [1]
    vim application/deployment.yaml
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2 # tells deployment to run 2 pods matching the template
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.19.1
            ports:
            - containerPort: 80
    
    • 通过YAML文件创建一个Deployment
    kubectl apply -f application/deployment.yaml
    
    • 展示Deployment相关信息
    kubectl describe deployment nginx-deployment
    
    • 列出deployment创建的pods
    kubectl get pods -l app=nginx
    
    • 展示某一个pod信息
    kubectl describe pod <pod-name>
    
    • 删除deployment
    kubectl delete -f application/deployment.yaml
    

    2. 使用service暴露你的应用

    • 使用NodePort暴露30088端口给外部使用
    cat << EOF >nginx-svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      type: NodePort
      selector:
        app: nginx
      ports:
      - port: 80
        targetPort: 80
        nodePort: 30088
    EOF
    
    kubectl create -f nginx-svc.yaml
    
    • 查看service
    # kubectl get service
    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        18h
    nginx        NodePort    10.110.78.61   <none>        80:30088/TCP   2m45s
    
    • 访问
    通过http://10.13.1.3:30088/ 或http://10.13.1.2:30088/ 访问nginx服务,其中10.13.1.3和10.13.1.2分别为宿主机IP。
    
    • 删除service
    kubectl delete -f nginx-svc.yaml
    
    • Service 也可以用在 ServiceSpec 标记type的方式暴露 [3]
    ClusterIP (默认) - 在集群的内部 IP 上公开 Service 。这种类型使得 Service 只能从集群内访问。
    NodePort - 使用 NAT 在集群中每个选定 Node 的相同端口上公开 Service 。使用<NodeIP>:<NodePort> 从集群外部访问 Service。是 ClusterIP 的超集。
    LoadBalancer - 在当前云中创建一个外部负载均衡器(如果支持的话),并为 Service 分配一个固定的外部IP。是 NodePort 的超集。
    ExternalName - 通过返回带有该名称的 CNAME 记录,使用任意名称(由 spec 中的externalName指定)公开 Service。不使用代理。这种类型需要kube-dns的v1.7或更高版本。
    

    3. 删除deployment

    kubectl delete deployment nginx-deployment
    

    4. 参考资料

    [1] https://kubernetes.io/zh/docs/tasks/run-application/run-stateless-application-deployment/     使用Deployment运行一个无状态应用
    [2] http://qinghua.github.io/kubernetes-deployment/  轻松了解Kubernetes部署功能
    [3] https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/expose/expose-intro/   官网文档——使用 Service 暴露您的应用
    
  • 相关阅读:
    常见动态规划题目详解
    回溯法常见题目总结
    AWK语法入门
    JavaScript深拷贝—我遇到的应用场景
    git代码版本回退
    Rem实现移动端适配
    Weex了解
    Vue.js入门学习
    今日小结—304状态码,数组去重
    js今日小结—Ajax、前端安全、GET&POST、闭包、HTTPS
  • 原文地址:https://www.cnblogs.com/ljhbjehp/p/13598993.html
Copyright © 2020-2023  润新知