回顾
Kubernetes把集群里的计算资源定义为节点(Node),其中又划分成控制面和数据面两类。
- 控制面是Master节点,负责管理集群和运维监控应用,里面的核心组件是apiserver、etcd、scheduler、controller-manager。
- 数据面是Worker节点,受Master节点的管控,里面的核心组件是kubelet、kube-proxy、container-runtime。
WordPress 网站搭建步骤
第一步:
定义一个maria-cm对象:
apiVersion: v1
kind: ConfigMap
metadata:
name: maria-cm
data:
DATABASE: 'db'
USER: 'wp'
PASSWORD: '123'
ROOT_PASSWORD: '123'
把配置信息注入Pod,让MariaDB运行时从环境变量读取这些信息:
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
这里使用“envFrom”,这是因为ConfigMap里的信息比较多,如果用env.valueFrom一个个地写会非常麻烦,容易出错,而envFrom可以一次性地把ConfigMap里的字段全导入进Pod,并且能够指定变量名的前缀,非常方便。
kubectl apply -f mariadb-pod.yml
kubectl get pod -o wide
第二步:
编排WordPress对象的ConfigMap定义它的环境变量
apiVersion: v1
kind: ConfigMap
metadata:
name: wp-cm
data:
HOST: '172.17.0.2'
USER: 'wp'
PASSWORD: '123'
NAME: 'db'
HOST字段必须是MariaDB Pod的IP地址
再编写WordPress的YAML文件
apiVersion: v1
kind: Pod
metadata:
name: wp-pod
labels:
name: wp-pod
labels:
app: wordpress
role: website
spec:
containers:
- image: wordpress:5
name: wp-pod
iamgePullPolicy: IfNotPresent
ports:
- containerPort: 80
envFrom
- prefix: 'WORDPRESS_DB_'
configMapRef:
name: wp-cm
kubectl apply -f wp-pod.yml
kubectl get pod -o wide
第三步
WordPress Pod映射端口号,让它在集群外可见。
kubectl port-forward命令,它专门负责把本机的端口映射到在目标对象的端口号,用于Kubernetes的临时调试和测试。
下面我就把本地的“8080”映射到WordPress Pod的“80”,kubectl会把这个端口的所有数据都转发给集群内部的Pod:
kubectl port-forward wp-pod 8080:80 &
# &符号,让端口转发工作在后台进行,不会阻碍我们后续的操作。如需关闭端口转发,需要敲命令fg,它会把后台的任务带回到前台,使用“Ctrl+C”来停止转发
第四步
因为WordPress网站使用了URL重定向,直接使用“8080”会导致跳转故障,所以为了让网站正常工作,我们还应该在Kubernetes之外启动Nginx反向代理,保证外界看到的仍然是“80”端口号。
Nginx的配置文件
server {
listen 80;
default_type text/html;
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
}
然后我们用docker run -v命令加载这个配置文件,以容器的方式启动这个Nginx代理
docker run -d --rm \
--net=host \
-v /tmp/proxy.conf:/etc/nginx/conf.d/default.conf \
nginx: alpine
有了Nginx的反向代理之后,可以访问服务了