前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「走进k8s」Kubernetes1.15.1的部署 Wordpress(29)

「走进k8s」Kubernetes1.15.1的部署 Wordpress(29)

作者头像
IT架构圈
发布2019-09-02 22:15:34
1K0
发布2019-09-02 22:15:34
举报
文章被收录于专栏:IT架构圈IT架构圈

上节说了RBAC的使用方法,这次实践的方式部署下wordpress,之前也用docker-conpose的方式部署过wordpress,wordpress里面包含两部分,一个程序方式,一个是mysql数据库。现在通过不同的思路来解读如何通过k8s完成服务编排。

(一)一个Pod
  • ①创建一个命名空间
代码语言:javascript
复制
 kubectl create namespace wdblog
  • ②编写yaml单个文件

wordpress-pod.yaml mysql这个容器我们做了一个数据卷的挂载,这是为了能够将mysql的数据能够持久化到节点上,为了保证数据不丢失,容器挂了,重启数据还是通过挂载点

代码语言:javascript
复制
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
  • ③ 运行yaml文件
代码语言:javascript
复制
kubectl apply -f wordpress-pod.yaml
  • ④ 查看描述详情
代码语言:javascript
复制
kubectl describe pod wordpress -n wdblogkubectl get pod -n wdblog
  • ⑤ 单pod的问题

针对pod进行扩容,结果wordpress程序扩容没问题,但是mysql数据库怎么办啊 给三份啊,明显这种是不行的。数据必须唯一性啊。真的这么简单的话就不需要各种数据库集群解决方案了。那怎么办?拆分成2个pod不就可以了。下面咱们一起实践。

(二)两个Pod

wordpress 一个pod,mysql一个pod。在结合之前学到的知识。

  • ① 编写wordpress-all.yaml
代码语言:javascript
复制
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
  • ② 运行上边的yaml 尝试访问
代码语言:javascript
复制
kubectl apply -f wordpress-all.yamlkubectl get pod -n wdblog
  • ③ 自动应对流量高峰期
代码语言:javascript
复制
kubectl autoscale deployment wordpress-deploy --cpu-percent=10 --min=1 --max=10 -n wdblogkubectl get pods -n wdblogkubectl get hpa -n wdblog
  • ④ 访问下wordpress

192.168.86.100:31306

  • ⑤ 查看dashboard
  • ⑥ 自动扩容
  • ⑥ 解析这个yaml 分析它
  1. 通过---来进行分块编写。
  2. 都在同一的一个命名空间下。
  3. 通过Deployment来管理我们的Pod。
  4. 最上边是mysql,如何让mysql和wordpress进行通信要用到一个之前说过的service,type没有写默认的还记得吧都是ClusterIP,集群内可以相互访问。
  5. 但是针对wordpress要暴露服务的,需要使用type: NodePort,添加了Nodeport,指定31306的端口。
  6. 滚动更新策略,这样可以保证我们在更新应用的时候服务不会被中断RollingUpdate。
  7. mysql重新创建后,clusterIP非常有可能就变化了,不能使用ip的方式,直接通过环境变量别名的方式来写mysql:3306。
  8. 为了确定在mysql运行起来之后在运行没wordpress,使用了容器初始化InitContainer的用法,直到mysql服务创建完成后,initContainer才结束,结束完成后我们才开始下面的部署。initContainers。
  9. 健康检测,我们前面说过liveness probe和rediness probe是提高应用稳定性非常重要的方法,每10s检测一次应用是否可读,每3s检测一次应用是否存活。
  10. 增加 HPA,让我们的应用能够自动应对流量高峰期。

PS:各位老铁下去仔细看下yaml的编写 和添加下 自动扩缩容,主要wordpress提高应用稳定性的方式和方法,这都是前面学习过的,等于把前面一起学习的回顾下。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)一个Pod
  • (二)两个Pod
相关产品与服务
网站建设
网站建设(Website Design Service,WDS),是帮助您快速搭建企业网站的服务。通过自助模板建站工具及专业设计服务,无需了解代码技术,即可自由拖拽模块,可视化完成网站管理。全功能管理后台操作方便,一次更新,数据多端同步,省时省心。使用网站建设服务,您无需维持技术和设计师团队,即可快速实现网站上线,达到企业数字化转型的目的。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档