摘要
本文将会给朋友们讲解在centos下,通过kubernetes和docker来安装MySql和Tomcat 应用的详细步骤。
本文将会给朋友们讲解在centos下,通过kubernetes和docker来安装MySql和Tomcat 应用的详细步骤。
需要您注意的是,您在通过本教程完成部署 MySql和Tomcat 应用时,您的环境必须已经成功安装了kubernetes和docker,否则请您移步centos 8 使用 kubeadm 安装 kubernetes 1.8.2 最新完整教程进行kubernetes和docker的安装。
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应用
# 注意,是物理机/虚拟机的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端口进行访问