Kubernetes通过RC部署mysql
一、环境准备
首先,我开始准备kubernetes的安装和相关镜像下载,建议采用VMware Workstation,有条件也可以使用真实的服务器或者云服务器,本次采用的是64位Centos7.7的操作系统
Cetntos7.7
2H4G
二、具体操作
(1)关闭centos7 防火墙
systemctl disable firewalld
systemctl stop firewalld
(2)安装etcd和kubernetes软件(会自动安装docker)
yum -y install etcd kubernetes
(3)按顺序启动所有服务
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
至此,我们的一个单机版的kubernetes集群环境就安装启动完成了
(4)编写一个RC定义文件:mysql-rc.yaml
apiVersion : v1
kind : ReplicationController
#副本控制器RC
metadata :
name : mysql
#RC的名称,全局唯一
spec :
replicas : 1
#pod副本期待数量
selector :
app : mysql
#符合目标的pod拥有此标签
template :
#根据此模板创建Pod的副本(实例)
metadata :
labels:
app : mysql
#pod副本拥有的标签,对应RC的Selector
spec :
containers :
#pod内容器的定义部分
- name : mysql
#容器的名称
image : mysql
#容器对应的Docker Image
ports :
- containerPort : 3306
#容器应用监听的端口
env :
#注入容器内的环境变量
- name : MYSQL_ROOT_PASSWORD
value : "123456"
(5)创建完成mysql-rc.yaml后,为了将它发布到Kubernetes集群中,在master节点执行命令:
[root-hostname RC]# kubectl create -f mysql-rc.yaml
replicationcontroller "mysql" created
这里会出现问题,kubectl get pod 没有显示任何pod
这里将/etc/kubernetes/apiserver 中的23行注释掉后systemctl restart apisever 即可:
#KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
然后删除RC重新创建RC
删除RC: kubectl delete rc mysql
重新创建RC后发现确实有pod显示了,但是pod状态是ContainerCreating,无法启动
这里需要参考该博主的文档:https://www.cnblogs.com/randy-lo/p/13321148.html
为了避免后续博主删除,这边写一下命令:
yum install -y *rhsm*
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
再次删除RC,重新创建RC后即可发现pod正常运行
(6)最后创建一个与之相关联的kubernetes service–mysql的定义文件mysql-server.yaml
apiVersion : v1
kind : Service
#表明是kubernetes service
metadata :
name : mysql
#service 全局唯一名称
spec :
ports :
- port : 3306
#service 提供服务的端口号
selector :
#service对应pod拥有这里定义的标签
app : mysql
创建完成后运行命令创建service:
[root-hostname RC]#kubectl create -f mysql-service.yaml
运行查看命令,可以查看到刚刚创建的service
[root-hostname RC]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP POST(S) AGE
mysql 10.254.171.122 <none> 3306/TCP 48s
部署最后发现无法进入容器查看,因为本次部署用的是1H1G (头铁) 发现OOM Killer会因为内存不足杀掉进程,虽然可以docker ps看到容器,但是实际进程已经不存在了,所以血的教训,还是使用资源配置充足的服务器吧TT
【本文章是作者刚刚接触kubernetes 借鉴《kubernetes 权威指南》和CSDN博主 海阔云深的类似文档、博主WA自动机~ 编写的,如有雷同纯属巧合,仅供参考,未经允许不得转载,谢谢】