K8S的搭建在https://blog.csdn.net/weixin_43212365/article/details/105665215可以查看
我们要在K8S上启动Mysql服务分为以下几步
首先我们认识一下以下几个关键词
- pod 逻辑概念 k8s调度的单元 可以认为就是一个container实例,一般的pod可能在这台机器上面运行,如果失败了,会飘到另外一台机器上面去重新创建
- ReplicationController 简写rc 是pod的复制抽象 解决pod的扩容缩减的问题,保证运行的pod数量同ReplicationController数量一致(分布式高可靠而且考虑负载可以动态缩减)
- service 是pod的路由代理抽象 解决pod之间的服务发现问题 selector,保证pod的动态变化对访问透明(比如容器容器重启、切换机器了、缩容的过程中被终止了、比如出现故障在其他机器上面恢复,我的pod所在的机器可能是发生了变化,但是我的service对外提供服务都是无感知的,不关心里面怎么变,对外提供服务都是一样的)
对外提供服务只需要service地址(固定的),不需要pod地址
准备
为MySQL服务创建一个RC定义文件mysql-rc.yaml
下面给出完整的内容和解释
[root@hadoop001 mysql-yaml]# cat mysql-rc.yaml
apiVersion: v1 #api版本
kind: ReplicationController #副本控制器RC
metadata: #元数据
name: mysql-master #RC的名称,全局唯一
namespace: ruozedata #命名空间
labels: #复制控制器标签
name: mysql-master
spec:
replicas: 1 #pod副本的期待数量
selector: #找pod的label为mysql-master
app: mysql-master #符合目标的pod拥有此标签
template: #根据模板创建pod的副本(实例)
metadata:
labels:
app: mysql-master #pod副本拥有的标签,对应RC的Selector,pod的label为mysql-master
spec:
containers: #pod内容器的定义部分
- name: master #容器的名称
image: 172.19.242.225/ruozedata/mysql-master:v1.0 #容器对应的docker image,私服
ports:
- containerPort: 3306 #容器应用监听的端口号
env: #注入容器内的环境变量
- name: MYSQL_ROOT_PASSWORD
value: "123456"
[root@hadoop001 mysql-yaml]#
创建一个Kubernetes Service ——MySQL的定义文件(名为mysql-service.yaml)
apiVersion: v1
kind: Service
metadata:
name: mysql-master
spec:
externalIPs:
- 172.19.242.228 #强制制定了一一台机器对外服务,hadoop002的机器
ports:
- port: 3306
targetPort: 3006
selector:
app: mysql-master #通过这个同pod来关联
选取第一台机器去pull
docker pull hackeruncle/mysql-master:v1.0
docker pull hackeruncle/mysql-slave:v1.0
Tag image on docker
docker tag b73ad03215d5 172.19.242.225/ruozedata/mysql-master:v1.0
docker tag b152e49ead77 172.19.242.225/ruozedata/mysql-slave:v1.0
Push image to Harbor
docker push 172.19.7.111/ruozedata/mysql-master:v1.0
docker push 172.19.7.111/ruozedata/mysql-slave:v1.0
创建namespace
选取第一台机器
kubectl create namespace ruozedata
kubectl get namespaces
创建secret
选取第一台机器
kubectl create secret docker-registry ruozedatakey \
--namespace=ruozedata \
--docker-server=172.19.242.225 \
--docker-username=admin \
--docker-password=Harbor12345 \
[email protected] #邮箱可以自定义
kubectl get secret --namespace=ruozedata -o wide
解读yaml且做初始化
rc --> pod
service
做了三个增强
添加secret
添加MySQL data的持久化,重新添加
设置externalIPs 对外暴露能够访问
k8s nodes初始化
选取两台节点机器,一块做
//如果之前做过的话
kubectl delete svc/mysql-master svc/mysql-slave --namespace=ruozedata
kubectl delete rc/mysql-master rc/mysql-slave --namespace=ruozedata
//删除后重新创建,第二次做的话,需要执行,不然会有残留
rm -rf /var/lib/mysql-master-cdh && mkdir -p /var/lib/mysql-master-cdh
rm -rf /var/lib/mysql-slave-cdh && mkdir -p /var/lib/mysql-slave-cdh
创建master
先去对应的yaml文件调整image地址
Dockerfile & yaml
选取第一台机器
kubectl create -f mysql-master-rc.yaml
kubectl create -f mysql-master-service.yaml
[root@hadoop001mysql_replication_cdh]# kubectl get all --namespace=ruozedata #查看是否是Running状态
NAME READY STATUS RESTARTS AGE
pod/mysql-master-