乐趣区

关于kubernetes:kubernetes部署一个应用程序

文章原文

部署 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


如上图可别离查看到一个名为 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


如上图可查看到名称为 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


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

滚动更新

滚动更新容许以下操作:

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

    kubectl apply -f nginx-deployment.yaml

    查看过程及后果
    执行命令,可察看到 pod 一一被替换的过程。

    watch kubectl get pods -l app=nginx

    文章原文

退出移动版