浅尝Kubernetes

news2024/11/30 0:26:49

第一节

内容编排与Kubernetes

为什么要用k8s

集群环境容器部署的困境,假设我们有数十台服务器。分别部署Nginx,redis,mysql,业务服务。如何合理的分配这些资源。这里就需要用到容器编排

容器编排

在实际集群环境下,需要自动完成容器的构建和部署,在宿主机上安装什么容器,如何管理,完成这些工作的工具就是容器编排工具。

常见的容器编排工具

Docker compose :单机多容器

Docker swarm: 官方跨主机的容器编排工具

kubernetes(k8s) :Google提供的容器编排工具,和docker swarm是竞争对手关系,功能上相差不多。

k8s优势

Google提供,因为google体量大,k8s的实际编排经验上更多,市场占有率更高

K8s的职责

自动化容器的部署和复制

随时扩展与收缩容器规模

容器分组Group,并且提供容器间的负载均衡

实时监控,实时的故障发现,自动替换

k8s基本概念

img

Pod:
  • Pod是“容器”的容器,可以包含多个“Container”
  • Pod是k8s最小可部署单元,一个Pod就是一个进程
  • Pod内容容器网络互通,每个Pod都由自己虚拟IP
  • Pod都是部署完整的应用或模块

Pause(容器):提供了网络底层功能,简单理解Pod内容器间的请求变成localhost,IPC(NetWork(PID(HostName pause …)))

Container(容器)

Label(标签)

说明标签,相当于每一个Pod的别名,方便k8s主节点Master找到对应的Pod进行操作

Replication Controller(复制控制器)

存在于主节点Master上,它的职责是对Pod的数量进行实时监控,剔除失去响应的Pod ,改变参数控制Pod副本的数量

Service(服务)

跨主机、跨容器间的网络通信,进行逻辑分组

Node(节点)

Kubernetes Master(k8s主节点)

具体使用到的技术

每个节点都应该安装三个应用程序,docker,kubelet,kube-proxy

kubelet:用于执行相应的k8s命令,横向对比docker相当于docker命令。kubelet是k8s的核心命令。

kube-proxy:代理,Service能做到跨主机、跨容器间的网络通信,依赖的就是kube-proxy

第二节

安装K8S的四种方式

  • 使用kubeadmin通过离线镜像安装(推荐)
  • 使用阿里云共有云平台平台k8s(花钱)
  • 通过yum官方仓库安装(上古版本)
  • 二进制包的形式进行安装,kubeasz(github)

设计初安装并不复杂,一切的安装包都是google远程下载安装,因为墙的原因,只能使用上面四种,推荐使用第一种,选择业界稳定版本

环境准备

虚拟机

Centos7 Master *1, Master:192.168.163.132

Centos7 Node *2 ,Node1:192.168.163.133, Node2:192.168.163.137

设置主机名与时区、添加hosts网络主机配置,三台虚拟机都要设置

1.设置时区、主机名

timedatectl set-timezone Asia/Shanghai # 都要执行
hostnamectl set-hostname master #132执行
hostnamectl set-hostname node1 #133执行
hostnamectl set-hostname  node2 #137执行

2.网络配置

#设置好以后可以通过主机名来和其他主机进行网络数据传输,比如在master主机中ping node1,ping node1,网络是通的

vim /etc/hosts 
# 黏贴下面内容
192.168.163.132 master
192.168.163.133 node1
192.168.163.137 node2

3.关闭防火墙,三台虚拟主机都要设置。生产环境跳过

#学习过程中linux安全增强模块关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#设置临时生效
setenforce 0
#禁用防火墙,防止端口被屏蔽
systemctl disable firewalld
#停止防火墙
systemctl stop firewalld

安装Kubeadm快速部署工具

步骤

不只是Master节点,所有节点都需要严格按照下面步骤运行。

1.将镜像包上传至服务器每个节点

mkdir /usr/local/k8s-install

cd /usr/local/k8s-install

XFTP 上传安装文件kubernetes-1.14

[^安装镜像kubernetes-1.14文件夹下面的kuber114-rpm.tar.gz是我们的kubeAdm集群管理工具的压缩包; docker-ce-18.09.tar.gz是docker的压缩包;k8s-114-images.tar.gz是k8s镜像本身;flannel-dashboard.tar.gz是仪表盘,用来监控集群状态的;]:

2.每个Centos上安装Docker

tar -zxvf docker-ce-18.09.tar.gz
cd docker
# 加载当前目录下所有rpm文件,自动完成安装
yum localinstall -y *.rpm
# 启动docker
systemctl start docker
# 设置docker为自启动
systemctl enable docker

3.确保从cgroups均在同一个从groupfs

#cgroups是control groups的简称,它为Linux内核提供了一种任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统。
#cgroups是实现IaaS虚拟化(kvm、lxc等),PaaS容器沙箱(Docker等)的资源管理控制部分的底层基础。
#子系统是根据cgroup对任务的划分功能将任务按照一种指定的属性划分成的一个组,主要用来实现资源的控制。

#在cgroup中,划分成的任务组以层次结构的形式组织,多个子系统形成一个数据结构中类似多根树的结构。cgroup包含了多个孤立的子系统,每一个子系统代表单一的资源

docker info | grep cgroup

如果不是groupfs,执行下列语句

cat << EOF > /etc/docker/daemon.json
{
“exec-opts”: [“native.cgroupdriver=cgroupfs”]
}
EOF
systemctl daemon-reload && systemctl restart docker

4.安装kubeadm
kubeadm是集群部署工具
cd /usr/local/k8s-install/kubernetes-1.14
tar -zxvf kube114-rpm.tar.gz
cd kube114-rpm
yum localinstall -y *.rpm

5.关闭交换区
swapoff -a
vi /etc/fstab
#swap一行注释

6.配置网桥

cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

7.通过镜像安装k8s

cd /usr/local/k8s-install/kubernetes-1.14

#加载本地镜像

docker load -i k8s-114-images.tar.gz

#加载仪表盘镜像

docker load -i flannel-dashboard.tar.gz

第三节

利用kubeadm创建集群

集群设备

Centos7 Master *1, Master:192.168.163.132

Centos7 Node *2 ,Node1:192.168.163.133, Node2:192.168.163.137

初始化一主两从集群设备

1.master主服务器配置

#指定k8s版本,pod的虚拟ip范围 

kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16

#控制台提示需要运行以下命令

mkdir -p $HOME/ .kube

#/etc/kubernetes/admin.conf 是kubeadm有关于集群的核心配置文件, $HOME/.kube/config是k8s默认去读取的文件夹

sudo cp -i /etc/kubernetes/admin.conf  $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/congfig

#不需要在master运行,后面会在node1和node2运行,node1、node2和master构建成集群

kubeadm join 192.168.163.132:6443 --token aoeout.xxx \ --discover-token-ca-cert-hash sha256:xxx -discovery-token-unsafe-skip-ca-verfication
# 如果忘记上面的命令,在master上运行,拿到令牌aoeout.xxx
kubectl token list

2.检查下master状态

kubectl get nodes

#查看存在问题的pod,所有组件都是running状态,k8s的master设置完成

kubectl get pod --all-namespaces

#设置全局变量

#加载和创建flannel网络组件(组件状态是pending的话,尝试使用下面命令,跨pod通信最底层的网络协议)

kubectl create -f kube-flannel.yaml

3.从节点Node1和node2设置

#node1和node2设置

kubeadm join 192.168.163.132:6443 --token aoeout.xxx \ --discover-token-ca-cert-hash sha256:xxx

#检查集群状态

kubectl get nodes

第四节

重新启动服务

用于服务器重启了,恢复k8s。

  • 启动节点的k8s服务,systemctl start kubelet
  • 设置开机启动 systemctl enable kubelet,即便服务器重启了,kubelet也会随之重启
kubeadm/kubelet/kubectl区别

1.kubeadm是kubernetes集群快速构建工具,快速构建主节点,让从属的node节点快速加入当中 ,大幅度简化集群构建工作

2.kubelet运行在所有节点上,负责启动POD和容器的程序,以系统服务形式在后台运行,保证POD和容器的可用性

3.kubectl是kubernetes命令行工具,提供指令,对集群发送各种命令

启动Web UI Dashboard

在k8s 中默认提供了一个可视化界面,对集群进行监控和管理,学习下如何开启Web UI和基本的操作

先找到kubernetes-1.14文件夹,找到文件夹下面的kubernetes-dashboard.ymal仪表盘的核心配置文;admin-role.yaml配置文件说明管理员角色有哪些职能;kubernetes-dashboard-admin.rbac.yaml是基于RBAC基于角色的访问控制权限

# 简单配置
# kubectl apply读取配置文件,并使用配置文件进行配置
kubectl apply -f kubernetes-dashboard.yaml
kubectl apply -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml
# 获取系统命名空间kube-system下的服务有哪些,通过宿主机ip+端口访问控制台
kubectl -n kube-system get svc

第五节

Dashboard部署Tomcat集群

1.配置阿里云镜像加速器

确保每一个集群节点都配置,否则创建容器会遇到无法下载问题

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://b66nkcgc.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2.浏览器回到 dashboard地址 192.168.163.132.32000

左侧菜单中找到工作负载->创建->创建应用->(输入应用名称mytomcat;镜像名称:tomcat:latest;容器组个数:2个副本;服务:外部,其它电脑才可以访问容器;端口:8000是pod端口,目标端口:8080,在容器启动后容器8080端口映射到pod虚拟ip的8000端口)->部署

3.检查概况汇总的部署状况,容器组的状态,点击日志查看日志输出

4.如何访问tomcat,概况->副本集->名称,服务中的 内部端点的端口32421,这个内部端点端口就是外部访问的端口,浏览器中输入node1ip+32421,node2ip+32421,32421可以在服务暴露中修改

5.测试。docker -ps,找到名为tomcat的容器id, 使用命令docker rm- f id,强制删除,来模拟tomcat容器挂掉的场景;k8s会检测到这一情况,并尝试恢复tomcat容器

Deployment脚本部署Tomcat集群

2个副本;服务:外部,其它电脑才可以访问容器;端口:8000是pod端口,目标端口:8080,在容器启动后容器8080端口映射到pod虚拟ip的8000端口)->部署

3.检查概况汇总的部署状况,容器组的状态,点击日志查看日志输出

4.如何访问tomcat,概况->副本集->名称,服务中的 内部端点的端口32421,这个内部端点端口就是外部访问的端口,浏览器中输入node1ip+32421,node2ip+32421,32421可以在服务暴露中修改

5.测试。docker -ps,找到名为tomcat的容器id, 使用命令docker rm- f id,强制删除,来模拟tomcat容器挂掉的场景;k8s会检测到这一情况,并尝试恢复tomcat容器

Deployment脚本部署Tomcat集群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA-抽象类和接口

文章目录 前言 大家好呀,今天给大家带来抽象类和接口的讲解,那么废话不多说,跟着我一起去学习吧! 1.1抽象类的概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果 一个类…

Java 11新特性:模块化系统和本地变量类型推断

作为Java语言的最新版本&#xff0c;Java 11带来了许多新特性&#xff0c;其中最引人注目的是模块化系统和本地变量类型推断。这两个新特性对Java开发人员来说具有重要意义&#xff0c;因此在本文中&#xff0c;我们将详细探讨这两个新特性及其对Java开发的影响。 章节1&#…

记录一次uniapp实现APP自动升级

描述 app的版本管理和升级&#xff0c;是一个不可或缺的功能&#xff0c;而uniapp则是提供了一整套的流程&#xff0c;由于官方文档过于复杂&#xff0c;而且写的云里雾里的&#xff0c;所以个人记录一次我的操作&#xff0c;直到配置成功。 总体 一共分为2个部分&#xff0…

scanf与printf函数的用法

前言&#xff1a; 学习c语言编程&#xff0c;必不可少的操作就是键盘输入与屏幕输出。今天我想讲讲自己对scanf与printf使用的看法 一、scanf与printf&#xff1a; 1.scanf()函数&#xff1a; int scanf ( const char * format, ... ); 函数的功能&#xff1a;从标准输入中…

契约锁亮相华为2023中国合作伙伴大会,共谱华为云软件生态新篇章

5月8日-9日&#xff0c;以“因聚而生 众志有为”为主题的“华为中国合作伙伴大会2023”在深圳举行。契约锁作为华为云优秀软件伙伴&#xff0c;受邀参会并在“聚数字化先行者&#xff0c;谱软件生态新乐章”分论坛开展“让数字可信&#xff0c;打通数字化最后一公里”数字化实践…

Google Play 政策更新重点回顾 (下) | 2023 年 4 月

Google Play 和您一样&#xff0c;始终坚持为用户提供更优质的产品、更流畅的体验。为持续打造值得信赖的优质应用平台&#xff0c;我们也在不断进行政策更新。在上一篇文章中与您回顾了 2023 年 4 月 Google Play 政策的更新要点&#xff0c;这篇文章我们将为您带来重点政策解…

golang汇编之常量和全局变量(三)

常量 Go汇编语言中常量以$美元符号为前缀。常量的类型有整数常量、浮点数常量、字符常量和字符串常量等几种类型。以下是几种类型常量的例子&#xff1a; $1 // 十进制 $0xf4f8fcff // 十六进制 $1.5 // 浮点数 $a // 字符 $"abcd" …

【加解密篇】Passware Kit Forensic暴力美学-已知部分密码自定义解密详细参数设置

【加解密篇】Passware Kit Forensic暴力美学-已知部分密码自定义解密详细参数设置 都说"自制武器不一定是最强的&#xff0c;但最强的武器一定是自制的"&#xff0c;对于取证工具也是一样&#xff0c;虽然默认配置足够强&#xff0c;但如果我们能根据实时情景自定义…

arduino 导入 Brain 库

一、引言 最近在做一个可以用脑电波控制的arduino小车&#xff0c;需要用到Brain这个库&#xff0c;而且需要自己导入才能使用。之前试了很多方法&#xff0c;导入成功了&#xff0c;过了几个月又忘记怎么导入了&#xff0c;今天想起来记录一下&#xff0c;好记性不如烂笔头。 …

LNK2019 无法解析的外部符号,一种新的思路

LNK2019 无法解析的外部符号&#xff0c;一种新的思路 一般来说&#xff0c;这种问题的原因有如下几点&#xff1a; 函数只有声明没有实现如果是其它库的函数&#xff0c;可能没有链接lib文件如果函数是封装在dll中的&#xff0c;可能没有导出如果是模板函数或模板类&#xf…

初始MyBatis,w字带你解MyBatis

一.什么是mybatis mybatis的概念 MyBatis 是一款优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。1、Mybatis是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;底层封装了JDBC&#xff0c;是程序员在开发时只需要关注SQL语句本身&#…

U-boot顶层Makefile文件分析(一)

在阅读 uboot 源码之前&#xff0c;肯定是要先看一下顶层 Makefile&#xff0c;分析 gcc 版本代码的时候一定是先从顶层 Makefile 开始的&#xff0c;然后再是子 Makefile&#xff0c;这样通过层层分析 Makefile 即可了解整个工程的组织结构。顶层 Makefile 也就是 uboot 根目录…

界面控件DevExpress WPF MessageBox组件,进一步增强用户体验!

在DevExpress WPF v22.2版本中&#xff0c;官方引入了一系列功能来帮助改进一个常见WPF UI元素——MessageBox的用户体验&#xff0c;新的MessageBox相关选项包括&#xff1a; 文本选择支持自定义图像支持带有计时器的按钮&#xff0c;可以自动关闭窗口 ThemedMessageBox类允…

OJ练习第103题——最大矩形

最大矩形 力扣链接&#xff1a;85. 最大矩形 题目描述 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”…

数据库管理-第七十四期 我的Oracle ACE之路(20230511)

数据库管理 2023-05-11 第七十四期 我的Oracle ACE之路1 差点错过2 ACE Associate3 一路走来总结 第七十四期 我的Oracle ACE之路 “终于等到你&#xff0c;还好我没放弃”。经过了整整4个月20天的等待&#xff0c;我终于收到了Oracle ACE Associate的确认邮件&#xff0c;成为…

『python爬虫』17. 线程池和进程池以及线程池实战(保姆级图文)

目录 1. 线程池和进程池解决的是调度问题2. 线程池3. 线程池实战&#xff1a;爬取西游记的标题总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 1. 线程池和进程池解决的是调度问题 ⽹站的数据太多了&#xff0…

典型随机噪声激励

1.按噪声的起源分类 根据噪声的起源&#xff0c;分为内部噪声和外部噪声。 内部噪声&#xff1a;来源于系统内部的涨落运动或被检测信号&#xff0c;如布朗粒子受到周围液体分子的无规则碰撞即为内部噪声&#xff1b; 外部噪声&#xff1a;来自系统所处外部环境的随机涨落&…

endNote X9 导入英文文献(谷歌学术、web of science 等)

文章目录 1 导入英文文献&#xff08;谷歌学术、web of science 等&#xff09;2 EndNote X9 插入参考文献常见问题总结3 EndNote X9 快速上手教程&#xff08;毕业论文参考文献管理器&#xff09; 1 导入英文文献&#xff08;谷歌学术、web of science 等&#xff09; 谷歌学术…

Vite如何实现秒级依赖预构建的能力

大家都知道, Vite是一个提倡 no-bundle 的构建工具,相比于传统的 Webpack,能做到开发时的模块按需编译,而不用先打包完再加载。这一点我们在快速上手这一节已经具体地分析过了。 需要注意的是,我们所说的模块代码其实分为两部分,一部分是源代码,也就是业务代码,另一部…

线性代数——特征值与特征向量的性质

&#xff08;1&#xff09;设A为方阵&#xff0c;则A与 A T A^{T} AT有相同的特征值。 此处用到了两个关键性质&#xff0c;一&#xff1a;单位阵的转置为其本身,二&#xff1a;转置并不改变行列式的值。 &#xff08;2&#xff09;&#xff1a; 设n阶方阵A&#xff08; a i j…