K8S 有状态的应用和示例 1

本示例演示了在 Kubernetes 上安装 WordPress 和 MySQL,这两个应用都使用 PersistentVolumes 和 PersistentVolumeClaims 保存数据。

PersistentVolume(PV)是一块集群里由管理员手动提供,或 kubernetes 通过 StorageClass 动态创建的存储。 PersistentVolumeClaim(PVC)是一个满足对 PV 存储需要的请求。PersistentVolumes 和 PersistentVolumeClaims 独立于 Pod 生命周期,在 Pod 重启、重新调度或删除过程中均能保存数据。

:warning:

本示例中使用的是单实例 WordPress 和 MySQL Pods,故而不适用于生产环境。

:tipping_hand_man:

本教程中提供的文件使用 GA Deployment API,并且特定于 kubernetes 1.9 或更高版本。如果您希望将本教程与 Kubernetes 的早期版本一起使用,请相应地更新 API 版本,或参考本教程的早期版本。

一、教程目标

  • 创建 PersistentVolumeClaims 和 PersistentVolumes
  • 创建kustomization.yaml使用
    • Secret 生成器
    • MySQL 资源配置
    • WordPress 资源配置
  • 应用整个 kustomization 目录 kubectl apply -k ./
  • 清除示例

二、准备开始

你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。

如果你还没有集群,参考 用 kubeadm 在 Debian 或 Ubuntu 中创建 k8s 集群

三、教程开始

1 创建 PersistentVolumeClaims 和 PersistentVolumes

MySQL 和 Wordpress 都需要一个 PersistentVolume 来存储数据。他们的 PersistentVolumeClaims 将在部署步骤中创建。

许多集群环境都安装了默认的 StorageClass。如果在 PersistentVolumeClaim 中未指定 StorageClass,则使用集群的默认 StorageClass。

创建 PersistentVolumeClaim 时,将根据 StorageClass 配置动态设置 PersistentVolume。

:warning:

在本地群集中,默认的 StorageClass 使用hostPath供应器。 hostPath卷仅适用于开发和测试。使用 hostPath 卷,您的数据位于 Pod 调度到的节点上的/tmp中,并且不会在节点之间移动。如果 Pod 死亡并被调度到集群中的另一个节点,或者该节点重新启动,则数据将丢失。

:tipping_hand_man:

如果要建立需要使用hostPath设置程序的集群,则必须在 controller-manager 组件中设置--enable-hostpath-provisioner标志。

因为使用 StorageClass 必须要有一个存储后端服务器,通常在云服务商中使用 Kubernetes 集群时会提供,本地环境下想要使用,还需在本地自行创建一个存储服务器或虚拟机。

这不是本教程的重点,所以本教程使用手动创建的 PersistentVolume。

后面在创建 PVC 时,mysql 和 wordpress 都会申请一个 5G 的空间,此处将每个 PV 的空间设置为 5 G:

pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: wordpress-mysql-pv-volume-1
  labels:
    type: local
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/tmp"
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:4.8-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim

将上述两个配置文件补充到 kustomization.yaml

cat <<EOF >>./kustomization.yaml
resources:
  - mysql-deployment.yaml
  - wordpress-deployment.yaml
EOF

4 应用和验证

kustomization.yaml包含用于部署 WordPress 网站的所有资源以及 MySQL 数据库。您可以通过以下方式应用目录:

kubectl apply -k ./

4.1 验证

  1. 通过运行以下命令验证 Secret 是否存在

    kubectl get secrets
    

    结果:

    NAME                    TYPE                                  DATA   AGE
    mysql-pass-kkcc2b926b   Opaque                                1      9s
    
  2. 验证是否已动态配置 PersistentVolume

    kubectl get pvc
    

    使用 StoreClass 动态创建 PV 时可能要花费几分钟,使用本地创建的 PV 很快就可以绑定。

    结果:

    NAME             STATUS   VOLUME                        CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    mysql-pv-claim   Bound    wordpress-mysql-pv-volume-2   5Gi        RWO                           15s
    wp-pv-claim      Bound    wordpress-mysql-pv-volume-1   5Gi        RWO                           15s
    
  3. 验证 Pod 是否正在运行

    kubectl get pods
    
    NAME                               READY   STATUS    RESTARTS   AGE
    wordpress-c9cdf4bcb-f6q8s          1/1     Running   0          2m15s
    wordpress-mysql-575f8bcc5d-fhmx5   1/1     Running   0          2m15s
    
  4. 验证服务是否正在运行

    kubectl get services wordpress
    
    NAME        TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    wordpress   LoadBalancer   10.96.85.77   <pending>     80:31927/TCP   3m55s
    

    对外公开的端口为 31927。

  5. 访问 WordPress

    可以使用任一节点的 IP加上面获取到的端口进行访问。

    本例中地址为 http://192.168.31.221:31927 或 http://192.168.31.222:31927 或 http://192.168.31.231:31927。

    如果使用的是云服务商,那么上面的EXTERNAL-IP将会有一个可访问的 IP 地址,使用此 IP 地址加上面获取到的端口即可访问 WordPress 页面了。

    截屏2021-05-25 11.27.36

5 删除示例

运行下面的命令即可删除本教程创建的示例。

kubectl delete -k ./

手动删除 PV。

kubectl delete -f pv.yaml
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容