k8s部署tomcat及web应用_k8s介绍 k8s搭建一个应用(mysql+tomcat)
k8s介绍
k8s搭建一个应用(mysql+tomcat)
kubetnetes介绍
官网 https://kubernetes.io/
Kubernetes也就是k8s
Kubernetes是一个开源系统,它主要用来自动部署、扩容缩容和管理容器应用。
它将诸多应用的容器分为若干个逻辑单元以便于管理和发现。Kubernetes拥有着在kubernetes中,service是核心,我们并不需要太多关注kubernetes里面是怎么工作的,我们只需要关心它给我们提供什么service。
就像docker容器可以提供一个mysqld的服务、web服务等。
它需要拥有一个唯一的名字、有ip:port对外提供服务。
提供service的是容器,为了保证service的高可用,提供service的容器不能只有一个,需要一组。这一组容器我们把它叫做pod。
为了实现service和pod之间的关联,又有了标签(label)的概念,我们把功能相同的pod设定为同一个标签,比如,可以把所有提供mysql服务的pod贴上标签name=mysql,这样mysql service要作用于所有包含name=mysql标签的pod上。
pod运行在Node上,Node可以是一台物理机,也可以是虚拟机,通常一个Node上会运行几百个pod。每个pod里运行着一个特殊的容器,叫做Pause,其他容器叫做业务容器,业务容器共享Pause容器的网络栈和Volume挂载卷,因此同一个pod内的业务容器之间的通信和数据交换更为高效。
在集群管理方面,kubernetes将集群中的机器划分为一个master节点和一群工作节点Node,其中master上运行着kubeapiserver、kube-controller-manager、kube-scheduler,它们实现了资源管理、pod调度、弹性伸缩、安全控制、系统监
控、纠错等功能。Node是工作节点,运行应用程序,提供服务。Node上的最小单元是pod,Node上运行着kubernetesd的kubelet、kube-proxy服务进程,它们负责pod的创建、启动、监控、重启、销毁,以及实现负载均衡。
通过一组图了解kubernetes各个元素的关系:
Google高负载生产环境的15年经验,并结合了社区的优秀思想和实践。
扩容和升级需要一个关键的东西,Replication controller(RC),RC需要包含3个关键信息:
1)目标pod的定义
2)目标pod需要运行的副本数量(replicas)
3)要监控的目标pod的标签(Label)
工作过程:RC里定义好3个指标,kubernetes会根据RC定义的Label帅选出对应的pod,并实时监控其状态和数量,当实例数量少于定义的副本数(replicas),则会根据RC定义的pod模版来创建新的pod,然后将此pod调度到合适的Node上启动并运行。
可理解为pod的高可用,是rc来定义的(调度的)。可调度到其他正常的node上
该过程完全自动化,无需人工干涉。
从一个例子开始:
webapp(tomcat) + mysql
安装kubernetes #此处只是单机安装kubernetes,并不是安装集群
准备一台centos7.5以上的版本
#cat /etc/redhat-release 来看一下版本。如果不是 yum update升级一下
1) 关闭firewalld 和 selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2)安装etcd和kubernetes
yum install -y etcd kubernetes
#etcd是用来存储kubernetes里的集群文件的(存配置文件配置的数据库)
错误:docker-ce conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
错误:docker-ce-cli conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
#安装的时候报错,与docker相关的冲突。分别删除提示的那两个docker相关的:
yum remove -y docker-ce.x86_64 0:18.03.0.ce-1.el7.centos
yum remove -y docker-ce*
3)修改配置文件
vi /etc/sysconfig/docker
将--selinux-enabled 改为 --selinux-enabled=false --insecure-registry gcr.io
vi /etc/kubernetes/apiserver
把--admission_control参数中的ServiceAccount删除
4)准备工作
yum install python-rhsm-certificates
Package python-rhsm-certificates-1.19.10-1.el7_4.x86_64 is obsoleted by subscription-manager-rhsm-certificates-1.21.10-3.el7.centos.x86_64 which is already installed
如果提示python-rhsm-certificates-1.19.10-1.el7_4.x86_64 被已安装的 subscription-manager-rhsm-certificates-
1.20.11-1.el7.centos.x86_64 取代,就要执行下面两步骤:
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/redhatuep.pem > /etc/rhsm/ca/redhat-uep.pem
配置docker加速器
vi /etc/docker/daemon.json//加入如下内容
{
"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
5)按顺序启动所有服务
for s in etcd docker kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy
do
systemctl start $s
done
6)创建一个rc文件
vim mysql-rc.yaml #内容如下 #需注意空格
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
spec:
replicas: 1
selector:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.6
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
apiVersion: v1
kind: ReplicationController #副本控制器RC
metadata:
name: mysql #RC的名称,全局唯一
spec:
replicas: 1 #Pod副本的期待数量,如果这为10,那么最终他们形成了一个service
selector:
app: mysql #符合目标的Pod拥有此标签
template: #根据此模板创建Pod的副本(实例)
metadata:
labels:
app: mysql #Pod副本拥有的标签,对应RC的Selector
spec:
containers: #Pod内容器的定义部分
- name: mysql #容器的名称
image: mysql:5.6 #容器对应的Docker image。此处因为这个实验太老了,所以加了个5.6版本的
ports:
- containerPort: 3306 #容器应用监听的端口号
env: #注入容器内的环境变量
- name: MYSQL_ROOT_PASSWORD
value: "123456"
·················rc文件内容到此结束·································
docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest #不用执行这两步会自动拉取镜像。这两部如果手动执行,下面一步创建(create)之后,就会直接Running了。就不用等了
Trying to pull repository registry.access.redhat.com/rhel7/pod-infrastructure ...
latest: Pulling from registry.access.redhat.com/rhel7/pod-infrastructure
26e5ed6899db: Already exists
66dbe984a319: Already exists
9138e7863e08: Already exists
Digest: sha256:92d43c37297da3ab187fc2b9e9ebfb243c1110d446c783ae1b989088495db931
Status: Image is up to date for registry.access.redhat.com/rhel7/pod-infrastructure:latest
docker pull mysql:5.6
Trying to pull repository docker.io/library/mysql ...
5.6: Pulling from docker.io/library/mysql
Digest: sha256:e4a70c0f52bfda9ed28d2127b461ff44cbc381450e7ca22e83936560d8875f14
Status: Image is up to date for docker.io/mysql:5.6
kubectl create -f mysql-rc.yaml #上一步定义好rc文件,就可以去创建rc了
service "mysql" created
提示以下错误,检查vim mysql-rc.yaml配置注意空格。
error: error validating "mysql-rc.yaml":
replicationcontroller "mysql" created
kubectl get rc #可查看rc都有哪些。就是把所有的rc都get出来
[root@axinlinux-03 ~]# kubectl get rc
NAME DESIRED CURRENT READY AGE
mysql 1 1 0 2m
NAME DESIRED CURRENT READY AGE
mysql 1 1 1 2m #拉取完之后,get rc的时候会显示这个
kubectl get pods #通过pod看他的状态。就是把所有的pod都get出来
[root@axinlinux-03 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-qk4fc 0/1 Pending 0 3m
NAME READY STATUS RESTARTS AGE
mysql-qk4fc 0/1 Running 0 3m #状态为Running的时候就代表可以了
7)创建一个svc文件
vim mysql-svc.yaml #注意空格
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
·················svc文件内容到此结束·································
kubectl create -f mysql-svc.yaml
service "mysql" created
kubectl get svc #下面会出现mysql
[root@axinlinux-03 ~]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 443/TCP 3h
mysql 10.254.226.233 3306/TCP 2h
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 443/TCP 22m
mysql 10.254.226.233 3306/TCP 15s #这个ip就是sercice的ip,通过这个ip和prot就可以访问这个mysql了
mysql -uroot -p123456 -h10.254.226.233 #可登陆mysql
8)创建web rc文件
vim web-rc.yaml #注意空格
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 1
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: '10.254.226.233'
- name: MYSQL_SERVICE_PORT
value: '3306'
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 1
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: '10.254.226.233#这里的IP需要通过kubect get svc 查看mysql的cluster ip
- name: MYSQL_SERVICE_PORT
value: '3306'
·················web文件内容到此结束·································
kubectl create -f web-rc.yaml
9)创建web svc文件
vim web-svc.yamly
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001 #意思是在ens33的ip上去访问mysql服务,所以指定一个监听端口(因为上面的mysql不是要用哪个指定的ip去访问吗),这个端口最低不能超过30000
selector:
app: myweb
·················web文件内容到此结束·································
kubectl create -f web-svc.yaml #创建之前get pod查看是否已启动
10)访问
iptables -P FORWARD ACCEPT #把forward规则打开
curl 本机ip:30001/demo/ 或浏览器
以上,可以点击add去增加一行数据
去mysql看看有没有这行数据:
mysql -uroot -p123456 -h10.254.226.233
show databases;
use HPE_APP
show tables;
select from * T_USERS;
+----+-----------+-------+
| ID | USER_NAME | LEVEL |
+----+-----------+-------+
| 1 | me | 100 |
| 2 | our team | 100 |
| 3 | HPE | 100 |
| 4 | teacher | 100 |
| 5 | docker | 100 |
| 6 | google | 100 |
| 7 | axin | 100 | #这就是刚刚在浏览器界面加的一行数据
+----+-----------+-------+
问题
总结:
kebuctl create -f XXX #-f后面跟的是文件名。可以通过rc文件创建rc,通过service(svc)文件创建一个service(svc)
kebuctl get pod #查看所有的pod
kubectl get svc #查看所有的sercive
kubectl get rc #查看所的rc
k8s部署tomcat及web应用_k8s介绍 k8s搭建一个应用(mysql+tomcat)相关推荐
- k8s部署tomcat及web应用_k8s部署tomcat的yaml文件
1.k8s部署tomcat的yaml文件 apiVersion: apps/v1 kind: Deployment metadata: name: mytomcat spec: replicas: 5 ...
- k8s部署-20-k8s的服务发现原理,k8s有几种服务发现规则
到现在为止,我们分别掌握了k8s部署.k8s镜像存储之harbor高可用,那么接下来是不是就应该实操了呢?不过不着急,实操之前我们要考虑下,还需要掌握什么呢? 是不是通信呀,这所有的前提都是在可以通信 ...
- 搭建go项目web服务器,3.2 Go搭建一个Web服务器
前面小节已经介绍了Web是基于http协议的一个服务,Go语言里面提供了一个完善的net/http包,通过http包可以很方便的就搭建起来一个可以运行的Web服务.同时使用这个包能很简单地对Web的路 ...
- 提供最全面最详细的ESP32从零开始搭建一个物联网平台教程(从最基本的配网和内建WEB服务器开始到自已搭建一个MQTT服务器)
目录 教程大纲 硬件需求 教程说明 教程章节链接 ESP32搭建WEB服务器一(AP配网) ESP32搭建WEB服务器二(STA模式) ESP32搭建WEB服务器三(AP模式与STA模式共存) ESP ...
- Dubbo的基本介绍和搭建一个Dubbo环境
什么是Dubbo Dubbo是一个分布式服务框架,提供了高性能以及透明化的RPC远程服务调用解决方法,以及SOA服务治理方案. Dubbo的核心部分: 远程通信:提供了高性能以及透明化的RPC远程服务 ...
- [Web]如何利用Boostrap框架搭建一个还可以的静态网站(五_子页_脱发指南)
文章目录 返回总结 整体效果 组件 人物介绍块 内容介绍块 代码 独属CSS HairLossGuide.css html HairLossGuide.html 返回总结 如何利用Boostrap框架 ...
- [Web]如何利用Boostrap框架搭建一个还可以的静态网站(六_子页)
文章目录 返回总结 整体效果 组件 vedio题目 vedio博主介绍 vedio vedio用户留言 电子烟评测块 辩论块 代码 html ElectronicCigarettes.html 返回总 ...
- k8s部署tomcat及web应用_k8s部署tomcat应用服务
1.ReplicationController文件 vi iae-rc.yaml 输入 apiVersion: v1 kind: ReplicationController metadata: nam ...
- go-zero微服务到k8s部署应有尽有系列(一)开发环境搭建
一.项目简介 本项目地址 : https://github.com/Mikaelemmmm/go-zero-looklook 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关 ...
最新文章
- JS给html控件赋值
- redis批量操作及性能分析
- Android全屏沉浸式应用
- idea创建文件自定义注释
- 主干网络系列(2) -ResNet V2:深度残差网络中的恒等映射
- linux下已修改但尚未保存_linux下查看和修改文件时间
- 无法安装 DotNetCore.1.0.0-VS2015Tools.Preview2解决方法
- java编程入门到精通课后答案,附源代码
- ITF条码的外边框如何设置
- Matlab获取线粒体序列及核苷酸初步分析
- 计算机专业英语容易挂科吗,大学英语专业容易挂科吗
- 高考30条干货分享!去哪能找到高质量2021高考学习资源?
- vue2 qrcodejs2链接生成二维码
- 什么是金手指,金手指的设计要求有哪些?
- 官方:最好的版本!Python 3.11正式版来了!
- DIV内文字两端对齐
- 2022-2028全球海上通道系统行业调研及趋势分析报告
- (附源码)ssm电影院管理系统的设计与实现 毕业设计241505
- 外卖跑腿小程序APP定制开发扫码点餐配送
- ARouter源码详解