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)相关推荐

  1. k8s部署tomcat及web应用_k8s部署tomcat的yaml文件

    1.k8s部署tomcat的yaml文件 apiVersion: apps/v1 kind: Deployment metadata: name: mytomcat spec: replicas: 5 ...

  2. k8s部署-20-k8s的服务发现原理,k8s有几种服务发现规则

    到现在为止,我们分别掌握了k8s部署.k8s镜像存储之harbor高可用,那么接下来是不是就应该实操了呢?不过不着急,实操之前我们要考虑下,还需要掌握什么呢? 是不是通信呀,这所有的前提都是在可以通信 ...

  3. 搭建go项目web服务器,3.2 Go搭建一个Web服务器

    前面小节已经介绍了Web是基于http协议的一个服务,Go语言里面提供了一个完善的net/http包,通过http包可以很方便的就搭建起来一个可以运行的Web服务.同时使用这个包能很简单地对Web的路 ...

  4. 提供最全面最详细的ESP32从零开始搭建一个物联网平台教程(从最基本的配网和内建WEB服务器开始到自已搭建一个MQTT服务器)

    目录 教程大纲 硬件需求 教程说明 教程章节链接 ESP32搭建WEB服务器一(AP配网) ESP32搭建WEB服务器二(STA模式) ESP32搭建WEB服务器三(AP模式与STA模式共存) ESP ...

  5. Dubbo的基本介绍和搭建一个Dubbo环境

    什么是Dubbo Dubbo是一个分布式服务框架,提供了高性能以及透明化的RPC远程服务调用解决方法,以及SOA服务治理方案. Dubbo的核心部分: 远程通信:提供了高性能以及透明化的RPC远程服务 ...

  6. [Web]如何利用Boostrap框架搭建一个还可以的静态网站(五_子页_脱发指南)

    文章目录 返回总结 整体效果 组件 人物介绍块 内容介绍块 代码 独属CSS HairLossGuide.css html HairLossGuide.html 返回总结 如何利用Boostrap框架 ...

  7. [Web]如何利用Boostrap框架搭建一个还可以的静态网站(六_子页)

    文章目录 返回总结 整体效果 组件 vedio题目 vedio博主介绍 vedio vedio用户留言 电子烟评测块 辩论块 代码 html ElectronicCigarettes.html 返回总 ...

  8. k8s部署tomcat及web应用_k8s部署tomcat应用服务

    1.ReplicationController文件 vi iae-rc.yaml 输入 apiVersion: v1 kind: ReplicationController metadata: nam ...

  9. go-zero微服务到k8s部署应有尽有系列(一)开发环境搭建

    一.项目简介 本项目地址 : https://github.com/Mikaelemmmm/go-zero-looklook 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关 ...

最新文章

  1. JS给html控件赋值
  2. redis批量操作及性能分析
  3. Android全屏沉浸式应用
  4. idea创建文件自定义注释
  5. 主干网络系列(2) -ResNet V2:深度残差网络中的恒等映射
  6. linux下已修改但尚未保存_linux下查看和修改文件时间
  7. 无法安装 DotNetCore.1.0.0-VS2015Tools.Preview2解决方法
  8. java编程入门到精通课后答案,附源代码
  9. ITF条码的外边框如何设置
  10. Matlab获取线粒体序列及核苷酸初步分析
  11. 计算机专业英语容易挂科吗,大学英语专业容易挂科吗
  12. 高考30条干货分享!去哪能找到高质量2021高考学习资源?
  13. vue2 qrcodejs2链接生成二维码
  14. 什么是金手指,金手指的设计要求有哪些?
  15. 官方:最好的版本!Python 3.11正式版来了!
  16. DIV内文字两端对齐
  17. 2022-2028全球海上通道系统行业调研及趋势分析报告
  18. (附源码)ssm电影院管理系统的设计与实现 毕业设计241505
  19. 外卖跑腿小程序APP定制开发扫码点餐配送
  20. ARouter源码详解

热门文章

  1. c语言中rewind函数_C语言中的rewind()函数与示例
  2. PowerGraph:Distributed Graph-Parellel Computation on Natural Graph
  3. 数据结构算法 - 栈
  4. 基于人脸识别的课堂签到管理系统【学习三】
  5. u3d android 优化
  6. 为什么电子邮件的账号地址公司是统一的,电子邮件地址该怎么写?
  7. Oracle数据库启动与关闭
  8. Authing 背后的计算哲学
  9. 如何进行隐私协议测试
  10. SAE J3016 自动驾驶分级定义 2021年4月更新