本次使用命令行:
[root@master ~]#kubectl create ns kube-examplenamespace/kube-examplecreated[root@master ~]#kubectl get ns kube-example NAMESTATUSAGEkube-exampleActive31s[root@master ~]#
- 然后编写部署到 Kubernetes 下面的资源清单:
# deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:wordpressnamespace:kube-examplelabels:app:wordpressspec:selector:matchLabels:app:wordpresstemplate:metadata:labels:app:wordpressspec:containers:- name:wordpressimage:wordpress:6.1.1-apacheports:- containerPort:80name:wdportenv:- name:WORDPRESS_DB_HOSTvalue:localhost:3306- name:WORDPRESS_DB_USERvalue:wordpress- name:WORDPRESS_DB_PASSWORDvalue:wordpress- name:mysqlimage:mysql:5.7imagePullPolicy:IfNotPresentargs:# 新版本镜像有更新,需要使用下面的认证插件环境变量配置才会生效!- --default_authentication_plugin=mysql_native_password- --character-set-server=utf8mb4- --collation-server=utf8mb4_unicode_ciports:- containerPort:3306name:dbportenv:- name:MYSQL_ROOT_PASSWORDvalue:rootPassW0rd- name:MYSQL_DATABASEvalue:wordpress- name:MYSQL_USERvalue:wordpress- name:MYSQL_PASSWORDvalue:wordpress
由于我们这里 MySQL 和 Wordpress 在同一个 Pod 下面,所以在 Wordpress 中我们指定数据库地址的时候是用的 localhost:3306
,因为这两个容器已经共享同一个 network namespace 了,这点很重要。
- 然后如果我们要想把这个服务暴露给外部用户还得创建一个 Service 或者 Ingress 对象,这里我们一步一步来,暂时先创建一个 NodePort 类型的 Service:
# service.yamlapiVersion:v1kind:Servicemetadata:name:wordpressnamespace:kube-examplespec:selector:app:wordpresstype:NodePortports:- name:webport:80targetPort:wdport
因为只需要暴露 Wordpress 这个应用,所以只匹配了一个名为 wdport
的端口。
- 现在我们来创建上面的几个资源对象:
#$ kubectl apply -f namespace.yaml$kubectlapply-fdeployment.yaml$kubectlapply-fservice.yaml
- 接下来就是等待拉取镜像,启动 Pod:
[root@master ~]#kubectl get pods -n kube-exampleNAMEREADYSTATUSRESTARTSAGEwordpress-7dc9f8748b-sb44t2/2Running0118m[root@master ~]# kubectl get svc -n kube-exampleNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S) AGEwordpressNodePort10.96.2.145<none>80:31409/TCP119m[root@master ~]#
- 测试
当 Pod 启动完成后,我们就可以通过上面的 http:deployment.apps"wordpress"deleted[root@master ~]#kubectl delete -f service.yaml service"wordpress"deleted[root@master ~]#