需要您注意的是,您在通过本教程完成部署 MySql和Tomcat 应用之前,请确保您的环境已经成功安装了kubernetes和docker,否则请您移步centos 8 使用 kubeadm 安装 kubernetes 1.8.2 最新完整教程进行kubernetes和docker的安装。
本文引用的原文地址 https://www.blog-china.cn/blog/liuzaiqingshan/home/254/1591608565959
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1ui7q4j1.mirror.aliyuncs.com"]
}
EOF
注意,这里使用的阿里云仓库为我自己生成的仓库,如果您想使用自己的阿里云仓库,请访问阿里云官网获取,此过程需要您重启机器,或者重启docker服务
docker查询可拉取的MySql镜像版本
docker search mysql
将返回如下内容
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9592 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3486 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 702 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 76
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 69
centurylink/mysql Image containing mysql. Optimized to be link… 61 [OK]
deitch/mysql-backup REPLACED! Please use http://hub.docker.com/r… 41 [OK]
bitnami/mysql Bitnami MySQL Docker Image 39 [OK]
tutum/mysql Base docker image to run a MySQL database se… 35
schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic backup… 30 [OK]
prom/mysqld-exporter 28 [OK]
linuxserver/mysql A Mysql container, brought to you by LinuxSe… 25
databack/mysql-backup Back up mysql databases to... anywhere! 20
centos/mysql-56-centos7 MySQL 5.6 SQL database server 19
circleci/mysql MySQL is a widely used, open-source relation… 19
mysql/mysql-router MySQL Router provides transparent routing be… 16
arey/mysql-client Run a MySQL client from a docker container 14 [OK]
openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 image… 6
fradelg/mysql-cron-backup MySQL/MariaDB database backup using cron tas… 6 [OK]
genschsa/mysql-employees MySQL Employee Sample Database 5 [OK]
devilbox/mysql Retagged MySQL, MariaDB and PerconaDB offici… 3
ansibleplaybookbundle/mysql-apb An APB which deploys RHSCL MySQL 2 [OK]
jelastic/mysql An image of the MySQL database server mainta… 1
widdpim/mysql-client Dockerized MySQL Client (5.7) including Curl… 0 [OK]
monasca/mysql-init A minimal decoupled init container for mysql 0
docker拉取mysql镜像
我将拉取MySql的5.7版本的镜像
docker pull mysql:5.7
拉取成功,将会返回如下信息
Digest: sha256:d16d9ef7a4ecb29efcd1ba46d5a82bda3c28bd18c0f1e3b86ba54816211e1ac4
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker查看可拉取的tomcat镜像
docker search tomcat
此将返回如下内容
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati… 2746 [OK]
tomee Apache TomEE is an all-Apache Java EE certif… 79 [OK]
dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 54 [OK]
bitnami/tomcat Bitnami Tomcat Docker Image 34 [OK]
kubeguide/tomcat-app Tomcat image for Chapter 1 28
consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 17 [OK]
cloudesire/tomcat Tomcat server, 6/7/8 15 [OK]
aallam/tomcat-mysql Debian, Oracle JDK, Tomcat & MySQL 13 [OK]
arm32v7/tomcat Apache Tomcat is an open source implementati… 10
rightctrl/tomcat CentOS , Oracle Java, tomcat application ssl… 6 [OK]
maluuba/tomcat7-java8 Tomcat7 with java8. 5
unidata/tomcat-docker Security-hardened Tomcat Docker container. 4 [OK]
amd64/tomcat Apache Tomcat is an open source implementati… 2
jelastic/tomcat An image of the Tomcat Java application serv… 2
arm64v8/tomcat Apache Tomcat is an open source implementati… 2
ppc64le/tomcat Apache Tomcat is an open source implementati… 1
camptocamp/tomcat-logback Docker image for tomcat with logback integra… 1 [OK]
99taxis/tomcat7 Tomcat7 1 [OK]
oobsri/tomcat8 Testing CI Jobs with different names. 1
i386/tomcat Apache Tomcat is an open source implementati… 1
secoresearch/tomcat-varnish Tomcat and Varnish 5.0 0 [OK]
picoded/tomcat7 tomcat7 with jre8 and MANAGER_USER / MANAGER… 0 [OK]
cfje/tomcat-resource Tomcat Concourse Resource 0
appsvc/tomcat 0
s390x/tomcat Apache Tomcat is an open source implementati… 0
docker拉取Tomcat镜像
我将拉取Tomcat的8版本的镜像
docker pull tomcat:8
拉取成功,返回如下信息
Digest: sha256:bb59f86923e098ad54f485853e8f8859e2243cfceae762cccc2e5460ab006237
Status: Downloaded newer image for tomcat:8
docker.io/library/tomcat:8
kubernetes创建Tomcat rc
首先在你的服务器上创建tomcat-rc.yaml文件,并将下面内容复制进去
apiVersion: v1 # 描述RC对象的版本是v1
kind: ReplicationController # 我现在在声明RC对象
metadata: # metadata中的是对此RC对象描述信息
name: myweb-tomcat # 此RC对象在gpf-first命名空间中名为myweb-tomcat-1,同一个命名空间中的命名一定是不同的
namespace: gpf-first # 使用gpf-first命名空间
spec: # spec中是对RC对象的具体描述
replicas: 1 # 我要创建5个副本,单位当然是pod
selector: # 选择器,用来选择对象的
app: myweb # 我选择了标签为app: myweb的pod
template: # 模版,以下用来描述创建的pod的模版
metadata: # 对pod模版描述的元数据
labels: # 给以下的东西打上标签,以让selector来选择
app: myweb # 给pod模版打上app: myweb这样的标签
spec: # 对pod模版的具体描述
containers: # 以下就是要放入pod模版中的容器了
- image: docker.io/tomcat:8 # 选择镜像
name: myweb # 容器名
imagePullPolicy: Never #不使用远程镜像
resources: # 给该容器分配的资源大小
limits:
cpu: "0.5" # CPU大小
memory: 1Gi # 内存大小
ports: # 容器端口号
- containerPort: 8080
env: # 给该容器设置环境变量,这里就可以将mysql与我们的tomcat连接
- name: MYSQL_SERVICE_HOST
value: 'mysql'
- name: MYSQL_SERVICE_PORT
value: '3306'
在服务器上上述文件所在目录执行以下命令
kubectl create -f tomcat-rc.yaml
此将成功创建一个tomcat 的pod
在服务器上创建tomcat-service.yaml(服务发现),并将下面内容复制进去
apiVersion: v1
kind: Service # 对象是service
metadata:
name: myweb # 此对象在命名空间中的名称
namespace: gpf-first # 使用gpf-first命名空间
spec:
ports:
- name: myweb-svc # 端口名称,Service是必须指定端口名称的
# 重点在于三个端口的区别,容器有端口,Service有端口,node也有真实的端口号,这里我们将这三者关联起来
port: 8080 # Service的端口号
targetPort: 8080 # 容器暴露的端口号
nodePort: 80 # node的真实端口号
selector:
app: myweb # Service选择了标签为app: myweb的pod
type: NodePort
内容不再解释
创建tomcat 的服务发现和负载均衡
kubectl create -f tomcat-service.yaml
此步将创建了一个对集群外暴露80端口的tomcat应用pod
此时你将可以通过如下url访问到你的tomcat应用
http://你的物理机/虚拟机ip
注意,是物理机/虚拟机的ip,而非svc的ip
1、注意,如果你的主机报如下错误
The Service "myweb" is invalid: spec.ports[0].nodePort: Invalid value: 80: provided port is not in the valid range. The range of valid ports is 30000-32767
这是因为node默认的端口范围为30000-32767,可以修改端口范围以让node允许此端口
vim /etc/kubernetes/manifests/kube-apiserver.yaml
找到 --service-cluster-ip-range 这一行,在这一行的下一行增加 如下内容
- --service-node-port-range=1-65535
记得重启哦
2、如果报如下错误
node(s) had taints that the pod didn't tolerate.
请执行如下命令
kubectl taint nodes --all node-role.kubernetes.io/master-
kubernetes创建Mysql rc
首先在你的服务器上创建mysql-rc.yaml文件,并将下面内容复制进去
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb-mysql
namespace: gpf-first
spec:
replicas: 1
selector:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: docker.io/mysql:5.7
imagePullPolicy: Never #不使用远程镜像
name: mysql
resources:
limits:
cpu: "0.3"
memory: 0.8Gi
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "root#dba1"
在服务器上上述文件所在目录执行以下命令
kubectl create -f mysql-rc.yaml
此将成功创建一个mysql的pod
在服务器上创建mysql-service.yaml(服务发现),并将下面内容复制进去
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: gpf-first
spec:
ports:
- name: mysql-svc
port: 3306
targetPort: 3306
nodePort: 31101
selector:
app: mysql
type: NodePort
此步将创建了一个对集群内暴露3306端口的Mysql应用pod
此时你将可以在tomat中部署应用时,通过该mysql的svc的ip+3306端口进行访问