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

本文主要是利用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页面了。

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值