【云原生】玩转Kubernetes实战(一):Pod、ConfigMap的使用

  • Post author:
  • Post category:其他


本文主要是利用Kubernetes 集群搭建出一个 WordPress 网站,用了三个镜像:WordPress、MariaDB、Nginx。

下面是其简单的架构图,用于直观的展示这个系统的内部逻辑关系:

在这里插入图片描述

简单来说,就是要通过本地地址

http://127.0.0.1

直接访问到WordPress网站。



WordPress 网站搭建步骤



实验环境
  • 适用于 Linux 的 Windows 子系统 (WSL)
  • docker
  • K8s


第一步:编排MariaDB对象

编写

maria-pod.yaml

文件,主要会生成一个ConfigMap对象和一个pod对象。


maria-cm

主要有四个环境变量,比如数据库名、用户名、密码等。在pod对象中,将

maria-cm

中的配置信息注入pod,让MariaDB运行时从环境变量中读取这些信息。

apiVersion: v1
kind: ConfigMap
metadata:
  name: maria-cm

data:
  DATABASE: 'db'
  USER: 'wp'
  PASSWORD: '123'
  ROOT_PASSWORD: '123'

---
apiVersion: v1
kind: Pod
metadata:
  name: maria-pod
  labels:
    app: wordpress
    role: database

spec:
  containers:
  - image: mariadb:10
    name: maria
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 3306

    envFrom:
    - prefix: 'MARIADB_'
      configMapRef:
        name: maria-cm


第二步:编排 WordPress 对象

编写

wp-pod.yaml

文件。和第一步中的一样,还是先用 ConfigMap 定义它的环境变量,在这个 ConfigMap 里要注意的是“HOST”字段,它必须是 MariaDB Pod 的 IP 地址,如果不写正确 WordPress 会无法正常连接数据库。然后在pod对象中使用

envFrom

注入变量:

apiVersion: v1
kind: ConfigMap
metadata:
  name: wp-cm

data:
  HOST: '172.17.0.3'
  USER: 'wp'
  PASSWORD: '123'
  NAME: 'db'

---
apiVersion: v1
kind: Pod
metadata:
  name: wp-pod
  labels:
    app: wordpress
    role: website

spec:
  containers:
  - image: wordpress:5
    name: wp-pod
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80

    envFrom:
    - prefix: 'WORDPRESS_DB_'
      configMapRef:
        name: wp-cm


第三步:运行两个pod以及端口转发
kubectl apply -f maria-pod.yml
kubectl apply -f wp-pod.yml
kubectl get pod -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
maria-pod   1/1     Running   0          79m   172.17.0.3   minikube   <none>           <none>
wp-pod      1/1     Running   0          78m   172.17.0.4   minikube   <none>           <none>

为了让WordPress Pod对象能够在集群外可见,需要进行端口号映射。

因为 Pod 都是运行在 Kubernetes 内部的私有网段里的,外界无法直接访问,想要对外暴露服务,需要使用一个专门的

kubectl port-forward

命令,它专门负责把本机的端口映射到在目标对象的端口号,有点类似 Docker 的参数 -p,经常用于 Kubernetes 的临时调试和测试。

下面的命令就可以将本地的“8080”映射到WordPress的“80”,kubectl 会把这个端口的所有数据都转发给集群内部的 Pod:

kubectl port-forward wp-pod 8080:80 &


第四步:创建反向代理的 Nginx

这是因为 WordPress 网站使用了 URL 重定向,直接使用“8080”会导致跳转故障,所以为了让网站正常工作,我们还应该在 Kubernetes 之外启动 Nginx 反向代理,保证外界看到的仍然是“80”端口号。

为Nginx准备

proxy.conf

:

server {
  listen 80;
  default_type text/html;

  location / {
      proxy_http_version 1.1;
      proxy_set_header Host $host;
      proxy_pass http://host.docker.internal:8080;
  }
}

值得注意的是,

nginx

代理的是主机IP上的8080端口,而Nginx自身是在docker里,所以这里是从容器中访问host中的地址,所以proxy如上面所示(不能是127.0.0.1)

docker启动

nginx

容器进行反向代理:

docker run -d --rm -p 80:80 -v `pwd`/proxy.conf:/etc/nginx/conf.d/default.conf nginx


呈现结果

这时候,我们就可以在主机浏览器地址栏输入http://127.0.0.1,访问到WordPress页面了。

在这里插入图片描述



版权声明:本文为qq_41950508原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。