在Kubernetes集群上部署WordPress

时间:2020-01-09 10:34:18  来源:igfitidea点击:

说明

在本教程中,将指导我们如何在Kubernetes平台上部署WordPress。该指令可用于任何Kubernetes集群,无论是本地集群,GKE(Google Kubernetes引擎),AKS(Azure Kubernetes服务)还是EKS(弹性Kubernetes服务)。

本教程的第一部分将向我们展示如何在Kubernetes中启动第一个WordPress实例。

Kubernetes豆荚

Kubernetes在称为Pod的结构中运行容器,这是Kubernetes集群的最小原子单元。所有容器都在Kubernetes容器内运行,但是容器不等于容器。

每个Pod为网络和存储提供一个共享的命名空间。多个容器可以在单个容器中运行,其中每个容器都可以访问相同的网络名称空间和存储。尽管可以在单个Pod中运行多个容器,但是最佳实践是将每个应用程序部署到Kubernetes都有自己的Pod。

我们可能会问自己,如果不是最佳实践,为什么为什么要允许在单个容器中运行多个容器。问题的答案是,这使我们可以将实用程序容器添加到我们的pod上,例如日志聚合器。

为了使Pod成功启动,其中的所有容器必须成功执行。如果应用程序容器启动,但是日志记录或者应用程序监视容器失败,则容器将不会转换为运行状态。

创建一个WordPress Pod

要创建我们的第一个WordPress吊舱,我们需要在YAML中创建声明性配置。该配置为声明式,因为我们正在指示Kubernetes为Pod设置所需的状态。

创建一个名为wordpress-blog.yml的YAML文件

---
apiVersion: v1
kind: Pod
metadata:
  name: wordpress-blog
spec:
  containers:
  - name: wordpress-blog
    image: wordpress:5.2
    env:
    - name: WORDPRESS_DB_HOST
      value: database.host.name:3306
    - name: WORDPRESS_DB_NAME
      value: wordpress
    - name: WORDPRESS_DB_PREFIX
      value: myblog_

在Kubernetes中创建配置

kubectl create -f wordpress-blog.yml

create命令的输出将显示请求状态,因此将立即知道是否成功创建了容器。要列出正在运行的吊舱,我们将使用kubectl get命令。

kubectl get pods

输出将类似于以下内容,具体取决于集群中正在运行的Pod数量以及要查询的Kubernetes命名空间。

NAME             READY   STATUS    RESTARTS   AGE
 wordpress-blog   1/1     Running   0          65s

获取Pod详细信息

kubectl get命令只会向我们显示有关Pod的基本信息。要详细了解pod的配置和状态,我们将使用kubectl describe命令。

kubectl describe pods wordpress-blog
Name:               wordpress-blog
 Namespace:          default
 Priority:           0
 PriorityClassName:  
 Node:               worker/192.168.1.131
 Start Time:         Sat, 18 May 2019 06:38:16 -0400
 Labels:             
 Annotations:        cni.projectcalico.org/podIP: 172.20.1.56/32
 Status:             Running
 IP:                 172.20.1.56
 Containers:
   wordpress-blog:
     Container ID:   docker://f9b860f167fb990992cc4c0d57e51f7934bb58cd377848e0cbf90dfc4d0fc42b
     Image:          wordpress:5.2
     Image ID:       docker-pullable://Hyman@localhost:8eb650ebbc8ea8bf743e046967c06a789c43c4baa46252013faf3c6f5ddd0d58
     Port:           
     Host Port:      
     State:          Running
       Started:      Sat, 18 May 2019 06:38:18 -0400
     Ready:          True
     Restart Count:  0
     Environment:
       WORDPRESS_DB_HOST:    database.host.name:3306
       WORDPRESS_DB_NAME:    wordpress
       WORDPRESS_DB_PREFIX:  myblog_
     Mounts:
       /var/run/secrets/kubernetes.io/serviceaccount from default-token-x8jnp (ro)
 Conditions:
   Type              Status
   Initialized       True
   Ready             True
   ContainersReady   True
   PodScheduled      True
 Volumes:
   default-token-x8jnp:
     Type:        Secret (a volume populated by a Secret)
     SecretName:  default-token-x8jnp
     Optional:    false
 QoS Class:       BestEffort
 Node-Selectors:  
 Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                  node.kubernetes.io/unreachable:NoExecute for 300s
 Events:
   Type    Reason     Age    From               Message
   ----    ------     ----   ----               -------
   Normal  Scheduled  7m40s  default-scheduler  Successfully assigned default/wordpress-blog to worker
   Normal  Pulling    7m40s  kubelet, worker    pulling image "wordpress:5.2"
   Normal  Pulled     7m38s  kubelet, worker    Successfully pulled image "wordpress:5.2"
   Normal  Created    7m38s  kubelet, worker    Created container
   Normal  Started    7m38s  kubelet, worker    Started container

对Pod使用describe命令对于解决问题很有用。 "事件"部分位于输出的底部,提供了一个窗口,该窗口显示了为运行Pod中的容器而执行的活动,如果在容器执行期间发生任何错误,则将在此处输出。

更新Pod

广告连播的状态在其整个生命周期中都不太可能保持静态。我们可能需要在某个时候进行更新,例如更新WordPress版本。

要更新广告连播,我们首先需要更新用于创建广告连播的wordpress-blog.yml文件。然后,使用kubectl apply应用新配置。

kubectl apply -f wordpress-blog.yml

创建WordPress Pod部署

Kubernetes部署用于为Pod设置所需的部署状态。例如,我们可以设置要运行的Pod的副本数。

创建一个WordPress服务

Pod在设计上是临时的,因此它们不是暴露于其他服务或者公共Internet的良好选择。相反,当我们要公开运行在Pod中的应用程序时,必须创建服务定义。

服务定义设置如何在网络上公开服务。有多个选项可供选择,而我们选择的一个将用于服务的特定用例。

负载均衡器
负载均衡器服务类型将为服务分配一个可路由的公共IP地址。设置的负载均衡器将由Kubernetes网络设置确定。例如,如果集群在GKE或者Digital Ocean中运行,则将配置一个计算负载平衡器。

节点端口
节点级别的服务类型将使用节点本地的端口公开服务。要访问服务,将使用运行Pod的Kubernetes节点的IP地址。

集群IP
集群服务类型会将服务公开给整个Kubernetes集群。此类型对于将内部服务公开给其他服务和Pod很有用。例如,如果我们在集群中运行数据库服务,则不太可能需要暴露给Internet。相反,我们可以将公开范围限制为仅在集群中运行的资源。

创建服务

创建名为wordpress-blog-service.yml的新文件,并将以下内容添加到文件中。

---
apiVersion: v1
kind: Service
metadata:
  name: wordpress-blog-service
spec:
  type: LoadBalancer
  selector:
    application: wordpress-blog
  ports:
  - port: 80
  targetPort:
  - port: 80

要将服务定义添加到应用程序,请使用选择器。选择器的应用程序密钥中指定的值是pod或者部署yaml文件中的名称密钥值。

使用kubectl apply命令创建服务。

kubectl apply -f wordpress-blog-service.yml