11-实战二
部署 MySQL
先要用 ConfigMap 定义数据库的环境变量,有 DATABASE、USER、PASSWORD、ROOT_PASSWORD:
YAML apiVersion: v1 kind: ConfigMap metadata: name: mysql-cm data: DATABASE: 'db_wordpress' USER: 'wordpress' PASSWORD: '123456' ROOT_PASSWORD: '123456'
|
接下来,我们需要把 MySQL 由 Pod 改成 Deployment 的方式,replicas 设置成 1 个,template 里面的 Pod 部分没有任何变化,还是要用 envFrom把配置信息以环境变量的形式注入 Pod
YAML apiVersion: apps/v1 kind: Deployment metadata: name: wp-mysql labels: app: wordpress role: database spec: replicas: 1 selector: matchLabels: app: wp-mysql template: metadata: labels: app: wp-mysql spec: containers: - name: wp-mysql image: mysql:5.7 imagePullPolicy: IfNotPresent resources: limits: cpu: 1 memory: 2048Mi requests: cpu: 500m memory: 500Mi startupProbe: # 容器启动 periodSeconds: 15 tcpSocket: port: 3306 livenessProbe: # 存活 periodSeconds: 10 tcpSocket: port: 3306 readinessProbe: # 就绪 periodSeconds: 15 tcpSocket: port: 3306 ports: - containerPort: 3306 envFrom: - prefix: 'MYSQL_' configMapRef: name: mysql-cm
|
我们还需要再为 MySQL 定义一个 Service 对象,映射端口 3306,让其他应用不再关心 IP 地址,直接用 Service 对象的名字来访问数据库服务:
YAML apiVersion: v1 kind: Service metadata: name: wp-mysql-svc labels: spec: selector: app: wp-mysql ports: - port: 3306 targetPort: 3306 protocol: TCP
|
因为这三个对象都是数据库相关的,所以可以在一个 YAML 文件里书写,对象之间用 --- 分开,这样用 kubectl apply 就可以一次性创建好:
Bash [root@node-01 11-wordpress-deploy]# kubectl apply -f mysql-dep.yaml configmap/mysql-cm created deployment.apps/wp-mysql created service/wp-mysql-svc created
|
执行命令后,你可以用 kubectl get 查看对象是否创建成功,是否正常运行:
部署 WordPress
因为刚才创建了 MySQL 的 Service,所以在写 ConfigMap 配置的时候“HOST”就不应该是 IP 地址了,而应该是 DNS 域名,也就是 Service 的名字 wp-mysql-svc,这点需要特别注意:
Bash apiVersion: v1 kind: ConfigMap metadata: name: wp-cm data: HOST: 'wp-mysql-svc' USER: 'wordpress' PASSWORD: '123456' NAME: 'db_wordpress'
|
WordPress 的 Deployment 写法和 MySQL 也是一样的,给 Pod 套一个 Deployment 的“外壳”,replicas 设置成 2 个,用字段“envFrom”配置环境变量:
YAML apiVersion: apps/v1 kind: Deployment metadata: name: wp-dep labels: app: wp-dep spec: replicas: 2 minReadySeconds: 30 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate selector: matchLabels: app: wp-dep template: metadata: labels: app: wp-dep spec: containers: - name: wordpress image: wordpress:6 imagePullPolicy: IfNotPresent resources: limits: cpu: 1 memory: 1024Mi requests: cpu: 100m memory: 100Mi startupProbe: periodSeconds: 5 tcpSocket: port: 80 livenessProbe: periodSeconds: 10 tcpSocket: port: 80 readinessProbe: periodSeconds: 15 tcpSocket: port: 80 ports: - containerPort: 80 envFrom: - prefix: 'WORDPRESS_DB_' configMapRef: name: wp-cm
|
接下来为 WordPress 创建 Service 对象,这里使用了“NodePort”类型,并且手工指定了端口号“30080”(必须在 30000~32767 之间):
YAML apiVersion: v1 kind: Service metadata: name: wp-dep-svc labels: spec: selector: app: wp-dep type: NodePort ports: - port: 80 targetPort: 80 protocol: TCP nodePort: 30080 name: http
|
现在我们用 kubectl apply 部署 WordPress:
因为 WordPress 的 Service 对象是 NodePort 类型的,我们可以在集群的每个节点上访问 WordPress 服务。
部署 Ingress Controller
现在 MySQL,WordPress 都已经部署成功了,第三步就是部署 Nginx Ingress Controller。
使用 ingress 课上部署的 nginx ingress controller。
YAML apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: wp-ingress spec: ingressClassName: nginx rules: - host: wp.xinxianghf.cloud http: paths: - path: / pathType: Prefix backend: service: name: wp-dep-svc port: number: 80
|
给 ingress-nginx-controller deployment 添加 hostNetwork: true 属性,可以让 Pod 能够使用宿主机的网络。
YAML apiVersion: apps/v1 kind: Deployment metadata: labels: 。。。 name: ingress-nginx-controller namespace: ingress-nginx spec: minReadySeconds: 0 revisionHistoryLimit: 10 selector: matchLabels: 。。。 template: metadata: labels: 。。。 spec: hostNetwork: true # Pod 使用宿主机网络 containers:
|
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)