上节说了RBAC的使用方法,这次实践的方式部署下wordpress,之前也用docker-conpose的方式部署过wordpress,wordpress里面包含两部分,一个程序方式,一个是mysql数据库。现在通过不同的思路来解读如何通过k8s完成服务编排。
kubectl create namespace wdblog
wordpress-pod.yaml mysql这个容器我们做了一个数据卷的挂载,这是为了能够将mysql的数据能够持久化到节点上,为了保证数据不丢失,容器挂了,重启数据还是通过挂载点
apiVersion: v1kind: Podmetadata: name: wordpress namespace: wdblogspec: containers: - name: wordpress image: wordpress ports: - containerPort: 80 name: wdport env: - name: WORDPRESS_DB_HOST value: db:3306 - name: WORDPRESS_DB_USER value: wordpress - name: WORDPRESS_DB_PASSWORD value: wordpress - name: mysql image: mysql:5.7 imagePullPolicy: IfNotPresent ports: - containerPort: 3306 name: dbport env: - name: MYSQL_ROOT_PASSWORD value: rootPass123456 - name: MYSQL_DATABASE value: wordpress - name: MYSQL_USER value: wordpress - name: MYSQL_PASSWORD value: wordpress volumeMounts: - name: db mountPath: /var/lib/mysql volumes: - name: db hostPath: path: /var/lib/mysql
kubectl apply -f wordpress-pod.yaml
kubectl describe pod wordpress -n wdblogkubectl get pod -n wdblog
针对pod进行扩容,结果wordpress程序扩容没问题,但是mysql数据库怎么办啊 给三份啊,明显这种是不行的。数据必须唯一性啊。真的这么简单的话就不需要各种数据库集群解决方案了。那怎么办?拆分成2个pod不就可以了。下面咱们一起实践。
wordpress 一个pod,mysql一个pod。在结合之前学到的知识。
apiVersion: apps/v1beta1kind: Deploymentmetadata: name: mysql-deploy namespace: wdblog labels: app: mysqlspec: template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 imagePullPolicy: IfNotPresent ports: - containerPort: 3306 name: dbport env: - name: MYSQL_ROOT_PASSWORD value: rootPass123 - name: MYSQL_DATABASE value: wordpress - name: MYSQL_USER value: wordpress - name: MYSQL_PASSWORD value: wordpress volumeMounts: - name: db mountPath: /var/lib/mysql volumes: - name: db hostPath: path: /var/lib/mysql---apiVersion: v1kind: Servicemetadata: name: mysql namespace: wdblogspec: selector: app: mysql ports: - name: mysqlport protocol: TCP port: 3306 targetPort: dbport---apiVersion: apps/v1beta1kind: Deploymentmetadata: name: wordpress-deploy namespace: wdblog labels: app: wordpressspec: strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: wordpress spec: initContainers: - name: init-db image: busybox imagePullPolicy: IfNotPresent command: ['sh', '-c', 'until nslookup mysql;do echo waiting for mysql service; sleep 2; done;'] containers: - name: wordpress image: wordpress imagePullPolicy: IfNotPresent ports: - name: wdport containerPort: 80 livenessProbe: tcpSocket: port: 80 initialDelaySeconds: 10 periodSeconds: 3 readinessProbe: tcpSocket: port: 80 initialDelaySeconds: 15 periodSeconds: 10 resources: limits: cpu: 200m memory: 200Mi requests: cpu: 100m memory: 100Mi env: - name: WORDPRESS_DB_HOST value: mysql:3306 - name: WORDPRESS_DB_USER value: wordpress - name: WORDPRESS_DB_PASSWORD value: wordpress---apiVersion: v1kind: Servicemetadata: name: wordpress namespace: wdblogspec: selector: app: wordpress type: NodePort ports: - name: wordpressport protocol: TCP port: 80 nodePort: 31306 targetPort: wdport
kubectl apply -f wordpress-all.yamlkubectl get pod -n wdblog
kubectl autoscale deployment wordpress-deploy --cpu-percent=10 --min=1 --max=10 -n wdblogkubectl get pods -n wdblogkubectl get hpa -n wdblog
192.168.86.100:31306
PS:各位老铁下去仔细看下yaml的编写 和添加下 自动扩缩容,主要wordpress提高应用稳定性的方式和方法,这都是前面学习过的,等于把前面一起学习的回顾下。