前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在 Kubernetes 环境中搭建 MySQL (二):在 cloud native 环境下配置 MySQL 的几个关键点

如何在 Kubernetes 环境中搭建 MySQL (二):在 cloud native 环境下配置 MySQL 的几个关键点

作者头像
用户2443625
发布2018-08-23 11:42:18
1.2K0
发布2018-08-23 11:42:18
举报
文章被收录于专栏:blackpigletblackpigletblackpiglet

MySQL

  MySQL 在 Kubernetes 环境中运行这件事情本身并不困难,最简单的方式就是找到 MySQL 的 Docker image,跑起来就行了,但是要做到生产环境可用,还是有几个问题要解决,所以本文不对整个流程做详细的描述,而是把重点放在几个难点上。

1. Kubernetes 如何与 Ceph 联动

1.1 使用到的 Kubernetes 概念

Kubernetes 集群存储 PV 支持 Static 静态配置以及 Dynamic 动态配置,动态卷配置 (Dynamic provisioning) 可以根据需要动态的创建存储卷。我们知道,之前的静态配置方式,集群管理员必须手动调用云/存储服务提供商的接口来配置新的固定大小的 Image 存储卷,然后创建 PV 对象以在 Kubernetes 中请求分配使用它们。通过动态卷配置,能自动化完成以上两步骤,它无须集群管理员预先配置存储资源,而是使用 StorageClass 对象指定的供应商来动态配置存储资源。

1.2 Example:

cat rbd-storage-class.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: rbd
provisioner: kubernetes.io/rbd
parameters:
  monitors: 10.222.78.12:6789
  adminId: admin
  adminSecretName: ceph-secret-admin
  adminSecretNamespace: default
  pool: rbd
  userId: admin
  userSecretName: ceph-secret-admin
cat rbd-dyn-pv-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-rbd-dyn-pv-claim
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: rbd
  resources:
    requests:
      storage: 1Gi
rbd-dyn-pvc-pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: rbd-dyn-pvc-pod
  name: ceph-rbd-dyn-pv-pod1
spec:
  containers:
  - name: ceph-rbd-dyn-pv-busybox1
    image: busybox
    command: ["sleep", "60000"]
    volumeMounts:
    - name: ceph-dyn-rbd-vol1
      mountPath: /mnt/ceph-dyn-rbd-pvc/busybox
      readOnly: false
  volumes:
  - name: ceph-dyn-rbd-vol1
    persistentVolumeClaim:
      claimName: ceph-rbd-dyn-pv-claim

2. 如何实现 MySQL 主从

2.1 使用到的 Kubernetes controller

Manages the deployment and scaling of a set of Pods , and provides guarantees about the ordering and uniqueness of these Pods.

2.2 解决问题的思路

  使用多个 StatefulSet 运行多个 MySQL Pod ,第一个是 Master,其他是 Slave:

  • 主从 MySQL 的配置文件不同,需要在启动阶段做出区分。
  • 新加一个文件同步 container 来实现启动阶段 MySQL 主从文件同步。

2.3 实例

example

3. 如何让外网可以访问 MySQL 服务

  目前 Kubernetes 将服务暴露到外网的方式主要有三种:

  • NodePort:目前使用的方式,也是最简单的方式。 Node: 10.0.0.1, 10.0.0.2, 10.0.0.3 10.0.0.:30001 <-> service: mysql-1 10.0.0.:30002 <-> service: mysql-2 NodePort 的问题在于,service 如果出现问题,重新启动 port 会有变化;Node IP 变化的话,暴露服务的地址也会变;一个集群提供的端口资源限制为数千个。
  • Ingress:支持如下访问方式 http://testing.example.com/mysql-1 <-> service: mysql-1 http://testing.example.com/mysql-2 <-> service: mysql-2 但问题在于 MySQL client 只支持域名,不支持 URL。
  • LoadBalance

4. 该如何部署 Kubernetes

4.1 kubeadm

kubeadm 简介

A Stronger Foundation for Creating and Managing Kubernetes Clusters

What is the scope for kubeadm? We want kubeadm to be a common set of building blocks for all Kubernetes deployments; the piece that provides secure and recommended ways to bootstrap Kubernetes. Since there is no one true way to setup Kubernetes, kubeadm will support more than one method for each phase. We want to identify the phases every deployment of Kubernetes has in common and make configurable and easy-to-use kubeadm commands for those phases. If your organization, for example, requires that you distribute the certificates in the cluster manually or in a custom way, skip using kubeadm just for that phase. We aim to keep kubeadm usable for all other phases in that case. We want you to be able to pick which things you want kubeadm to do and let you do the rest yourself.

如何使用 kubeadm 搭建一个高可用的 Kubernetes 集群

Creating HA clusters with kubeadm

  • multi masters
  • masters' load balance
  • HA ETCD cluster
  • DNS HA
Kubernetes master HA best practice

Set up High-Availability Kubernetes Masters

4.2 自动化部署 Kubernetes

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.06.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Kubernetes 如何与 Ceph 联动
    • 1.1 使用到的 Kubernetes 概念
      • 1.2 Example:
      • 2. 如何实现 MySQL 主从
        • 2.1 使用到的 Kubernetes controller
          • 2.2 解决问题的思路
            • 2.3 实例
            • 3. 如何让外网可以访问 MySQL 服务
            • 4. 该如何部署 Kubernetes
              • 4.1 kubeadm
                • kubeadm 简介
                • 如何使用 kubeadm 搭建一个高可用的 Kubernetes 集群
                • Kubernetes master HA best practice
              • 4.2 自动化部署 Kubernetes
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档