单机版Kubernetes集群(一)
环境:CentOS Linux release 7.4.1708 (Core)
单机版Kubernetes集群的效果,如图:
1)JSP页面通过JDBC直接访问Mysql数据库并展示;这里只是为了实现,只要程序正确连接到了数据库上,它就会自动完成对应的Table的创建与初始化数据的准备工作。也就是当通过浏览器访问此应用的时候,就会显示一个表格,表格的数据来自数据库
一、基本环境
1、关闭防火墙(自己写的脚本)
#!/bin/bash# #FileName: iptables_stop.sh #Date: 20181029 #Author: LiLe #Contact: 836217653@qq.com #Version: V1.0 #Description: Centos7 stop firewalld in grain install(){ yum -y install firewalld yum -y install iptables-services } stop_service(){ systemctl stop firewalld systemctl stop iptables } starting_stop(){ systemctl disable firewalld.service systemctl disable iptables.service } main(){ install stop_service starting_stop } main
2、安装k8s
yum -y install etcd kubernetes
3、把Kubernetes apiserver配置文件/etc/kubernetes/apiserver里的--admission-control的ServiceAccount删除
4、启动所有的服务
systemctl start etcd master systemctl start docker node systemctl start kube-apiserver master systemctl start kube-controller-manager master systemctl start kube-scheduler master systemctl start kubelet node systemctl start kube-proxy node
二、启动Mysql服务
1、为Mysql创建一个RC定义文件,mysql-rc.yaml
apiVersion: v1 kind: ReplicationController #表明此资源对象的内型,"ReplicationController表明这是一个RC" metadata: name: mysql #RC的名称,全局唯一 spec: #spec是RC的相关属性定义 replicas: 1 #副本期待数量 selector: #是RC的Pod标签选择器,监控和管理拥有这些标签的Pod实例,确保当前集群上始终有且仅有replicas个Pod实例在运行,这里设置的replicas=1表明只能运行一个Mysql Pod实例,当集群中运行的Pod数量小于replicas时,RC会根据spec.template一节中定义的Pod模板来生成一个新的Pod实例,spec.template.metadata.labels指定了该Pod的标签,,需要注意的是这里的labels必须匹配之前的spec.selector,否则此RC每次创建了一个无法匹配Label的Pod,就会不停地尝试创建新的Pod. app: mysql #符合目标的Pod拥有此标签 template: #根据此模板创建Pod的副本(实例) metadata: labels: app: mysql #Pod副本拥有的标签,对应RC的Selector spec: containers: #Pod内容器的定义部分 - name: mysql #容器的名称 image: mysql #容器的镜像 ports: #容器暴露的端口 - containerPort: 3306 env: #注入到容器内的环境变量 - name: MYSQL_ROOT_PASSWORD value: "123456"
2、将mysql-controller发布到Kubernetes集群中
kubectl create -f mysql-rc.yaml
3、查看刚刚创建的RC
kubectl get rc
4、查看Pod的创建情况
kubectl get pods
这里会出现的错误:
1)这里的status一直处于ContainerCreating状态,可以通过查看状态是什么问题
kubectl describe pod mysql
可以看到这个文件不存在,下载安装
1) wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm 2) 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
2)docker-runc没有
5、通过docker ps -a可以看到有一个Mysql的容器启动了
6、创建一个与之关联的Kubernetes Service,mysql-svc.yaml
apiVersion: v1 kind: Service #表明是Kubernetes Service metadata: name: mysql #Service的全局唯一名称;Service 的服务名 spec: ports: - port: 3306 #Service提供服务的端口号 selector: app: mysql #service对应的Pod拥有这里定义的标签; 确定了哪些Pod副本(实例)对应到本服务
7、创建Service对象
kubectl create -f mysql-svc.yaml
8、查看刚刚创建的service
kubectl get svc
这里Mysql服务被分配了一个值为10.254.243.27的Cluster IP地址,这是一个虚地址,随后,Kubernetes集群中其他新创建的Pod就可以通过Service的Cluster IP + Port来连接和访问了。
通常情况下,Cluster IP是在Service创建后又Kubernetes系统自动分配的,其他的Pod无法预先知道某个Service的Cluster IP地址,因此需要一个服务发现机制来找到这个服务。Kubernetes里,根据Service的唯一名字,容器可以从环境变量中获取到Service对应的Cluster IP地址和端口,从而发起TCP/IP连接请求了。
三、启动Tomcat应用
1、启动Tomcat应用,创建对应的RC文件myweb-rc.yaml
apiVersion: v1 kind: ReplicationController metadata: name: myweb spec: replicas: 5 selector: app: myweb template: metadata: labels: app: myweb spec: containers: - name : myweb image: kubeguide/tomcat-app:v1 ports: - containerPort: 8080 env: - name: MYSQL_SERVICE_HOST value: 'mysql' - name: MYSQL_SERVICE_PORT value: '3306'
2、将tomcat发布到Kubernetes集群中
kubectl create -f myweb-rc.yaml
3、创建对应的Kubernetes Service
apiVersion: v1 kind: Service metadata: name: myweb spec: type: NodePort #表明此Service开启了NodePort方式的外网访问模式 ports: - port: 8080 nodePort: 30001 #在集群之外,可以通过30001这个端口访问myweb,对应到8080的虚端口上。 selector: app: myweb
kubectl create -f myweb-svc.yaml
四、访问
1、通过浏览器访问IP:PORT/demo/发现如下报错:
解决办法:
在Tomcat的myweb-svc.yaml文件中设置变量的时候,要写mysql集群的IP
2、改了yaml文件之后需要先删掉原有的rc和pods
kubectl delete rc myweb kubectl delete pods --grace-period=0 --force --all
3、按照上面的创建步骤创建一遍,再测试就可以了
作者:李先生
-------------------------------------------
个性签名:在平凡中坚持前行,总有一天会遇见不一样的自己!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
微信公众号 微信打赏 支付宝打赏
posted on 2018-11-06 13:41 Captain_Li 阅读(1788) 评论(0) 编辑 收藏 举报