环境:CentOS Linux release 7.4.1708 (Core)
 
单机版Kubernetes集群的效果,如图:
1)JSP页面通过JDBC直接访问Mysql数据库并展示;这里只是为了实现,只要程序正确连接到了数据库上,它就会自动完成对应的Table的创建与初始化数据的准备工作。也就是当通过浏览器访问此应用的时候,就会显示一个表格,表格的数据来自数据库
 
 
一、基本环境
 
1、关闭防火墙(自己写的脚本)

 
#!/bin/bash#

#FileName: iptables_stop.sh
#Date:
#Author: LiLe
#Contact: @qq.com
#Version: V1.
#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: #副本期待数量
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:
env: #注入到容器内的环境变量
- name: MYSQL_ROOT_PASSWORD
value: ""
 
 
 
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

 
 
 
 
可以看到这个文件不存在,下载安装

 
 
 
 
) 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.-.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没有

 
 
 
 
ln -s  /usr/libexec/docker/docker-runc-current /usr/libexec/docker/docker-runc

解决完上面的两个问题后,就可以看到status处于Running状态了

 
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: #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:
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name : myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort:
env:
- name: MYSQL_SERVICE_HOST
value: 'mysql'
- name: MYSQL_SERVICE_PORT
value: ''
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:
nodePort: #在集群之外,可以通过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= --force --all
 
 
3、按照上面的创建步骤创建一遍,再测试就可以了 
 

单机版Kubernetes集群(一)的更多相关文章

  1. 快速安装与配置kubernetes集群搭

    Kubernetes是什么? 首先,它是一个全新的基于容器技术的分布式架构领先方案.这个方案尽然很新,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要成果.确切地说,kubernete ...

  2. 基于Python+Django的Kubernetes集群管理平台

    ➠更多技术干货请戳:听云博客 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...

  3. Kubernetes集群搭建过程中遇到的问题

    1. 创建Nginx Pod过程中报如下错误: #kubectlcreate -f nginx-pod.yaml Error from server: error when creating &quo ...

  4. Kubernetes集群初探

    上文我们在一台虚机上演示了Kubernetes基于redis和docker的guestbook留言簿案例,本文我们将通过配置Kubernetes集群的方式继续深入研究.集群组件安装如下配置. IP N ...

  5. kubernetes集群部署

    鉴于Docker如此火爆,Google推出kubernetes管理docker集群,不少人估计会进行尝试.kubernetes得到了很多大公司的支持,kubernetes集群部署工具也集成了gce,c ...

  6. 在Openstack上创建并访问Kubernetes集群

    第一部分:创建集群 在Openstack部署Kubernetes集群运行Nginx容器的步骤,其中包括: 利用Murano部署Kubernetes集群 配置Openstack的安全性使Kubernet ...

  7. Centos7上安装Kubernetes集群部署docker

    一.安装前准备1.操作系统详情需要三台主机,都最小化安装 centos7.3,并update到最新 [root@master ~]# (Core) 角色 主机名 IPMaster master 192 ...

  8. 和我一步步部署 kubernetes 集群

    和我一步步部署 kubernetes 集群 本系列文档介绍使用二进制部署最新 kubernetes v1.6.1 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群: 在部署的过程中, ...

  9. 在Kubernetes集群中使用calico做网络驱动的配置方法

    参考calico官网:http://docs.projectcalico.org/v2.0/getting-started/kubernetes/installation/hosted/kubeadm ...

随机推荐

  1. L345 大脑复生

    Yale Researchers Build BrainEx Machine to Restore Brain Function After Death Researchers at Yale Uni ...

  2. Shell 命令替换

    1.命令替换,有两种方式 方式一:`command` 方式二:$(command) 2.应用场景 在命令中通过命令替换的方式,将某些子命令的结果嵌入到当前命令中. 3.举例 例1: 获取系统所用用户并 ...

  3. kaptcha生成java验证码

    kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片.同时将生成的验证码字符串放到 HttpSession中. 1 ...

  4. mysql_pconnect 问题

    不同于mysql_connect的短连接,mysql_pconnect持久连接的时候,将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接 ...

  5. Java学习——方法

    在这一次的学习中我觉得首先要了解: 什么是方法呢 方法又怎么定义与调用 上面这段代码是我们经常写到的,其实它就是一个方法,其中 public 是修饰符 void是返回值类型 main就是方法名 arg ...

  6. contos7 go 环境搭建

    安装包下载地址为:https://golang.org/dl/.(网址打不开请FQ) 根据不同系统,选择对应的安装包: 解压安装 1.下载源码包:go1.10 linux/amd64 2.将下载的源码 ...

  7. centos下搭建openstack的环境

    一.准备环境 linux (centos 7.2(C300的虚机) ) java1.8 官网下载tar包 安装前设置环境变量 JAVA_HOME=/usr/lib/jvm/java-1.8.0-ope ...

  8. linux中tar及压缩解压命令用法

    把常用的tar解压命令总结下,当作备忘: tar 命令可以为Linux的文件和目录创建档案.利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向 档案中加入新的文件.t ...

  9. iOS 二维码 学习

    这段时间忙着交接工作,找工作,找房子,入职,杂七杂八的,差不多一个月没有静下来学习了.这周末晚上等外卖的时间学习一下二维码的制作与扫描. 项目采用OC语言,只要使用iOS自带的CoreImage框架, ...

  10. install scrapy

    首先Python.lxml.OpenSSL这些工具Ubuntu是自带的,不用管它们. 其次安装pip,在命令行中执行以下命令: sudo apt-get install python-pip 1 1 ...