本文一起看一个基于k8s的实战小栗子,在这篇文章 中我们基于docker搭建了一个WordPress网站。本文就通过k8s再来实现一遍。架构图如下:
 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]>
这里因为pod里只有一个容器所以就没有使用-c参数来指定具体是哪个容器了,其实在实际的应用中我们一般也只会在一个pod中设置一个容器,所以一般可以认为pod和容器的对应关系是1:1
。
首先配置WordPress使用的ConfigMap配置对象,yaml如下:
apiVersion: v1
kind: ConfigMap
metadata:name: wp-cmdata:HOST: '172.17.0.5'USER: 'wp'PASSWORD: '123'NAME: 'db'
注意这里的HOST修改为MariaDB对应的POD IP地址。应用如下:
dongyunqi@dongyunqi-virtual-machine:~/test$ kubectl apply -f aa.yml
configmap/wp-cm created
WordPress yaml如下:
apiVersion: v1
kind: Pod
metadata:name: wp-podlabels:app: wordpressrole: websitespec:containers:- image: wordpress:5name: wp-podimagePullPolicy: IfNotPresentports:- containerPort: 80envFrom:- prefix: 'WORDPRESS_DB_'configMapRef:name: wp-cm
应用如下:
dongyunqi@dongyunqi-virtual-machine:~/test$ kubectl apply -f aa.yml
pod/wp-pod created
dongyunqi@dongyunqi-virtual-machine:~/test$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
maria-pod 1/1 Running 0 109m 172.17.0.5 minikube
wp-pod 1/1 Running 0 4m21s 172.17.0.6 minikube
因为WordPress是在k8s的私有网络里,宿主机是无法直接访问的,所以需要映射WordPress的80端口到宿主机,这里映射到宿主机的8080端口,使用命令kubectl port-forward
,如下:
unqi@dongyunqi-virtual-machine:~/test$ kubectl port-forward wp-pod 8080:80 &
[1] 2814520
dongyunqi@dongyunqi-virtual-machine:~/test$ Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
注意此时虽然宿主机8080端口已经映射到WordPress pod的80端口,但是直接访问8080端口还是不通的,我也不知道为什么,必须通过80才行,所以我们还需要在宿主机使用Nginx代理80端口。
Nginx配置文件如下:
dongyunqi@dongyunqi-virtual-machine:/tmp$ tee /tmp/proxy.yml <<-'EOF'
> 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;
> }
> }
> EOF
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 启动:
dongyunqi@dongyunqi-virtual-machine:/tmp$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
975cbe00fd24 nginx:alpine "/docker-entrypoint.…" 9 seconds ago Up 9 seconds epic_villani
...
然后访问宿主机80端口就可以了,我本地是http://192.168.64.131/
:
执行minikube dashboard
打开dashboard:
dongyunqi@dongyunqi-virtual-machine:~$ minikube dashboard
🤔 Verifying dashboard health ...
🚀 Launching proxy ...
🤔 Verifying proxy health ...
🎉 Opening http://127.0.0.1:45395/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
Gtk-Message: 12:23:35.970: Not loading module "atk-bridge": The functionality is provided by GTK natively. Please try to not load it.
查看当pod:
点击某个pod:
查看本文的ConfigMap:
参考文章列表:
k8s之基本环境准备 。
上一篇:论文创新及观点2