美文网首页
kubernetes部署一个应用程序

kubernetes部署一个应用程序

作者: SRE运维博客 | 来源:发表于2021-06-10 13:48 被阅读0次

    文章原文

    部署 nginx Deployment

    如果你已经完成了Kubernetes的搭建,那我跟我一块来部署第一个应用程序吧。没有完成 Kubernetes 集群搭建的,请参考文档 使用 kubeadm 安装 kubernetes 1.21

    创建 YAML 文件

    创建文件 nginx-deploy.yaml,内容如下:

    apiVersion: apps/v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
    kind: Deployment    #该配置的类型,我们使用的是 Deployment
    metadata:           #译名为元数据,即 Deployment 的一些基本属性和信息
      name: nginx-deployment    #Deployment 的名称
      labels:       #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
        app: nginx  #为该Deployment设置key为app,value为nginx的标签
    spec:           #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
      replicas: 1   #使用该Deployment创建一个应用程序实例
      selector:     #标签选择器,与上面的标签共同作用,目前不需要理解
        matchLabels: #选择包含标签app:nginx的资源
          app: nginx
      template:     #这是选择或创建的Pod的模板
        metadata:   #Pod的元数据
          labels:   #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
            app: nginx
        spec:       #期望Pod实现的功能(即在pod中部署)
          containers:   #生成container,与docker中的container是同一种
          - name: nginx #container的名称
            image: nginx:1.7.9  #使用镜像nginx:1.7.9创建container,该container默认80端口可访问
    

    应用 YAML 文件

    kubectl apply -f nginx-deploy.yaml
    

    查看部署结果

    # 查看 Deployment
    kubectl get deployments
    
    # 查看 Pod
    kubectl get pods
    
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

    如上图可分别查看到一个名为 nginx-deployment 的 Deployment 和一个名为 nginx-deployment-xxxxxxx 的 Pod

    kubectl 常用命令

    kubectl get

    显示资源列表

    # kubectl get 资源类型
    
    #获取类型为Deployment的资源列表
    kubectl get deployments
    
    #获取类型为Pod的资源列表
    kubectl get pods
    
    #获取类型为Node的资源列表
    kubectl get nodes
    

    名称空间

    在命令后增加 -A 或 --all-namespaces 可查看所有 名称空间中 的对象,使用参数 -n 可查看指定名称空间的对象,例如

    # 查看所有名称空间的 Deployment
    kubectl get deployments -A
    kubectl get deployments --all-namespaces
    # 查看 kube-system 名称空间的 Deployment
    kubectl get deployments -n kube-system
    

    kubectl describe

    显示有关资源的详细信息

    # kubectl describe 资源类型 资源名称
    
    #查看名称为nginx-XXXXXX的Pod的信息
    kubectl describe pod nginx-XXXXXX   
    
    #查看名称为nginx的Deployment的信息
    kubectl describe deployment nginx   
    

    kubectl logs

    查看pod中的容器的打印日志

    # kubectl logs Pod名称
    
    #查看名称为nginx-pod-XXXXXXX的Pod内的容器打印的日志
    #本案例中的 nginx-pod 没有输出日志,所以您看到的结果是空的
    kubectl logs -f nginx-pod-XXXXXXX
    

    kubectl exec

    在pod中的容器环境内执行命令

    # kubectl exec Pod名称 操作命令
    
    # 在名称为nginx-pod-xxxxxx的Pod中运行bash
    kubectl exec -it nginx-pod-xxxxxx /bin/bash
    

    为nginx Deployment 创建 Service

    创建文件 nginx-service.yaml

    apiVersion: v1
    kind: Service
    metadata:   #译名为元数据,即Deployment的一些基本属性和信息
      name: nginx-service   #Service 的名称
      labels:   #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组
        app: nginx  #为该Deployment设置key为app,value为nginx的标签
    spec:       #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问
      selector:     #标签选择器
        app: nginx  #选择包含标签 app:nginx 的 Pod
      ports:
      - name: nginx-port    #端口的名字
        protocol: TCP       #协议类型 TCP/UDP
        port: 80            #集群内的其他容器组可通过 80 端口访问 Service
        nodePort: 30080   #通过任意节点的 30080 端口访问 Service
        targetPort: 80  #将请求转发到匹配 Pod 的 80 端口
      type: NodePort    #Serive的类型,ClusterIP/NodePort/LoaderBalancer
    

    执行命令

    kubectl apply -f nginx-service.yaml
    

    检查执行结果

    kubectl get services -o wide
    
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

    如上图可查看到名称为 nginx-service 的服务。

    访问服务

    curl <任意节点的 IP>:30080
    

    伸缩应用程序

    伸缩的实现可以通过更改 nginx-deployment.yaml 文件中部署的 replicas(副本数)来完成

    spec:
      replicas: 2    #使用该Deployment创建两个应用程序实例
    

    修改 nginx-deploy.yaml 文件

    apiVersion: apps/v1     #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
    kind: Deployment        #该配置的类型,我们使用的是 Deployment
    metadata:               #译名为元数据,即 Deployment 的一些基本属性和信息
      name: nginx-deployment        #Deployment 的名称
      labels:           #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
        app: nginx  #为该Deployment设置key为app,value为nginx的标签
    spec:           #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
      replicas: 2   #使用该Deployment创建一个应用程序实例
      selector:         #标签选择器,与上面的标签共同作用,目前不需要理解
        matchLabels: #选择包含标签app:nginx的资源
          app: nginx
      template:         #这是选择或创建的Pod的模板
        metadata:   #Pod的元数据
          labels:   #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
            app: nginx
        spec:           #期望Pod实现的功能(即在pod中部署)
          containers:       #生成container,与docker中的container是同一种
          - name: nginx     #container的名称
            image: nginx:1.7.9      #使用镜像nginx:1.7.9创建container,该container默认80端口可访问
    

    执行命令

    kubectl apply -f nginx-deployment.yaml
    

    查看结果

    watch kubectl get pods -o wide
    
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

    如上图,你将会看到有两个应用程序在运行,运行了多个应用程序实例,可以在不停机的情况下执行滚动更新。

    滚动更新

    滚动更新允许以下操作:

    • 将应用程序从准上线环境升级到生产环境(通过更新容器镜像)
    • 回滚到以前的版本
    • 持续集成和持续交付应用程序,无需停机
      如果需要滚动更新执行如下命令即可
    kubectl apply -f nginx-deployment.yaml
    

    查看过程及结果
    执行命令,可观察到 pod 逐个被替换的过程。

    watch kubectl get pods -l app=nginx
    

    文章原文

    相关文章

      网友评论

          本文标题:kubernetes部署一个应用程序

          本文链接:https://www.haomeiwen.com/subject/oeiueltx.html