kubernetes介绍
应用部署方式演变
在部署应用程序的方式上经历的三个时代
传统部署
优点:简单,不需要其他技术的参与 缺点:不能为应用程序定义资源使用的边界,很难合理发分配计算机资源,程序之间容易产生影响 如果一个应用程序占用资源突然增高会影响其他资源
Hardware:计算机硬件
Operating System: 操作系统
App:运行的应用程序
虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的环境
Hardware:计算机硬件
优点:程序之间不会相互产生影响,提供了一定程序的安全性 缺点:增加了操作系统,浪费了部分的资源Operating System: 操作系统
Hypervisor:虚拟机监视器
Virtual Machine:虚拟机
Bin/Library:类,库
App:运行的应用程序
容器化部署:与虚拟机类似,但是共享了操作系统(共用了底层的操作系统)
kubernetes简介
优点:可以保证每个容器都有自己的文件系统,CPU,内存,进程等 运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦 (使用容器 启动应用程序的资源都不是有操作系统直接分配的,都是由容器来提供的) 容器化的应用程序可以跨云服务商,跨linux操作系统版本进行部署kubernetes官网:https://kubernetes.io/
kubernetes官方文档:https://kubernetes.io/zh-cn/docs/concepts/overview/
kubernetes是一个全新的基于容器的分布式架构领先方案,是谷歌Borg系统的一个开源版本,于2014年9
月发布的第一个版本,2015年7月份发布的第一个正式版
==kubernetes的本质是一组服务器集群,==它可以在每一个集群节点上运行特定的程序,来对节点中的
容器进行管理,它的目的就是实现资源管理的自动化
它主要实现以下功能:
自我修复
当容器启动失败时会对重启进行重启
当一个容器出现问题的时候会重新启用一个容器来代替它的工作
当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
弹性伸缩
可以根据需求,自动对集群中正在运行的容器进行调整
服务发现
服务可以通过自动发现的形式找到它所依赖的服务
负载均衡
如果一个服务启动了多个容器,能够自动实现请求的负载均衡
版本回退
如果发现新版本服务有问题,可以退回到原来的版本
存储编排
可以根据容器的编排自己创建存储卷
kubernetes组件
一个kubetnetes集群是由控制节点(master)和工作节点(node )构成
master:集群的控制平面,负责集群的决策(管理)
apiserver:资源操作的唯一入口,接收用户输入的命令,提供认证,授权,api注册和发现等机制(所以对 集群的管理操作都是从这个入口进来的) scheduler:负责集群资源的调度,按照预定的调度策略将Pod调度刀相应的node节点上(按照一定的算法将 应用部署的请求算一分给谁) controller-manager :负责维护集群的状态,比如程序部署安排,故障检测,自动扩展,滚动更新等 etcd:负责存储集群中各种资源对象的信息(用于保存集群中相关的信息
node:集群的数据平面,负责为容器提供运行环境 (工作)
kubelet:负责维护容器的生命周期,即通过控制docker,来创建,更新,销毁容器 kubeProxy:负责提供集群内部服务发现和负载均衡 docker:负责节点上容器的各种操作
1. 一旦kubernetes环境启动后,master和node都会将自身的信息存储刀etcd数据库中
2. 安装服务的请求首先发送到master节点的apiserver组件
3. apiserver组件会调用scheduler来决定应该把服务部署到哪一个node节点上面,在此时它会读取
etcd中存储各个node节点的信息,然后按照一定的算法进行选择并将结果告知apiserver
4. apiserver会调用controller-manager去调度node节点安装服务
5. kubelet接收到指令手,会通知docker,然后由docker来启动这个服务器的pod pod是
kubernetes的最小操作单元,容器必须在pod中
6. 服务运行以后,如果需要访问访问,就需要通过kube-proxy产生访问的代理这样外界用户就可以访
问集群中的服务了
kubernetes概念
Master:集群控制节点,每个集群需要至少一个master节点来负责集群的管控(安排工作的)
Node:工作负载节点,master分配容器给node工作节点上 node节点上的docker负载运行(真正干活
的)
Pod:容器都是运行在pod中一个pod可以运行一个或多个容器
Controller:控制器,通过它来实现pod的管理 比如启动pod 停止pod 伸缩pod数量等等
service:pod对外服务的统一入口 下面可以维护同一个类的多个pod
label:标签 用于对pod的进行分类,同一类的pod会拥有相同的标签
namespace:命名空间,用来隔离pod的运行环境
kubernetes环境部署
环境准备 centos7.9镜像 虚拟机三台
1.主机名解析
(三台虚拟机都需要执行)
把以下内容添加到/etc/hosts文件中 192.168.30.136 master 192.168.30.135 node 192.168.30.134 node1 [root@master ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.30.136 master 192.168.30.135 node 192.168.30.134 node1 #添加你完成ping一下主机名试试 [root@master ~]# ping node -c3 PING node (192.168.30.135) 56(84) bytes of data. 64 bytes from node (192.168.30.135): icmp_seq=1 ttl=64 time=0.539 ms 64 bytes from node (192.168.30.135): icmp_seq=2 ttl=64 time=0.276 ms 64 bytes from node (192.168.30.135): icmp_seq=3 ttl=64 time=0.328 ms --- node ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 0.276/0.381/0.539/0.113 ms
2.时间同步
(三台虚拟机都需要执行)
kubernetes要求集群中的节点时间必须精确一致
使用chronyd服务从网络同步时间
启动chronyd并设置开机自启 [root@master ~]# systemctl enable chronyd --now
3.禁用iptables和firewalld
(三台虚拟机都需要执行)
kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系
统的规则
#1.关闭firewalld服务并关闭开机自启 [root@master ~]# systemctl stop firewalld [root@master ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
4.禁用selinux
(三台虚拟机都需要)
#编辑/etc/selinux/config文件 把SELINUX=后面的值改为disabled [root@master ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
.5.禁用swap分区
(三台虚拟机都需要执行)
swap分区值的是虚拟内存分区,它的作用是在我们的物理内存使用完了之后,将磁盘空间虚拟成内存来
使用
启动swap设备会对系统的性能产生非常负面的影响
#编辑/etc/fstab禁用掉swap分区那一行 [root@master ~]# vim /etc/fstab [root@master ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Tue Nov 8 21:15:26 2022 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=c6ffacd9-9061-4228-aa24-892d398154a6 /boot xfs defaults 0 0 #/dev/mapper/centos-swap swap swap defaults 0 0
5.修改linux内核参数
(三台虚拟机都需要执行)
# 修改linux的内核参数,添加网桥过滤和地址转发功能 # 编辑/etc/sysctl.d/kubernetes.conf文件添加以下内容 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 #重新加载配置 [root@master ~]# sysctl -p #加载网桥过滤模块 [root@master sysctl.d]# modprobe br_netfilter #查看网桥模块是否加载成功 [root@master sysctl.d]# lsmod | grep br_netfilter br_netfilter 22256 0 bridge 151336 1 br_netfilter #重启系统 [root@master sysctl.d]# reboot
6.安装docker
(三台虚拟机都需要执行)
#更换镜像源 #下载源文件 [root@master ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo --2022-11-09 08:43:20-- https://repo.huaweicloud.com/dockerce/linux/centos/docker-ce.repo 正在解析主机 repo.huaweicloud.com (repo.huaweicloud.com)... 223.242.32.25, 223.242.32.21, 223.242.32.24, ... 正在连接 repo.huaweicloud.com (repo.huaweicloud.com)|223.242.32.25|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:1919 (1.9K) [application/octet-stream] 正在保存至: “/etc/yum.repos.d/docker-ce.repo” 100% [================================================================================ ================================================================================= ===================================================================>] 1,919 --.-K/s 用时 0s 2022-11-09 08:43:20 (1020 MB/s) - 已保存 “/etc/yum.repos.d/docker-ce.repo” [1919/1919]) #软件仓库地址替换 [root@master ~]# sudo sed -i 's+download.docker.com+repo.huaweicloud.com/dockerce+' /etc/yum.repos.d/docker-ce.repo #更新索引文件 [root@master ~]# yum makecache fast 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.ustc.edu.cn * extras: mirrors.ustc.edu.cn * updates: mirrors.ustc.edu.cn base | 3.6 kB 00:00:00 docker-ce-stable | 3.5 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/2): docker-ce-stable/7/x86_64/updateinfo | 55 B 00:00:00 (2/2): docker-ce-stable/7/x86_64/primary_db | 87 kB 00:00:00 元数据缓存已建立 #查看源中支持的docker版本 [root@master ~]# yum list docker-ce --showduplicates 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.ustc.edu.cn * extras: mirrors.ustc.edu.cn * updates: mirrors.ustc.edu.cn 可安装的软件包 docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.1-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.3-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.6-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.7-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.9-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.10-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.11-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.12-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.13-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.14-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.15-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.0-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.1-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.2-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.3-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.10-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.11-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.12-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.13-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.14-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.15-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.16-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.17-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.18-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.19-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.20-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.21-3.el7 docker-ce-stable #安装指定版本docker-ce docker-ce-cli [root@master ~]# yum install -y docker-ce-19.03.11 docker-ce-cli-19.03.11 #修改配置文件 docker在默认的情况下使用Cgroup Driver为cgroupfs而kubernetes推荐使用systemd 来代替cgroupfs [root@master ~]# mkdir /etc/docker [root@master ~]# cat <<EOF > /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://dalmipwp.mirror.aliyuncs.com"] } EOF #启动docker查看docker版本 [root@master ~]# systemctl enable docker --now Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. [root@master ~]# docker --version Docker version 19.03.11, build 42e35e61f3 [root@master ~]# docker version Client: Docker Engine - Community Version: 19.03.11 API version: 1.40 Go version: go1.13.10 Git commit: 42e35e61f3 Built: Mon Jun 1 09:13:48 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.11 API version: 1.40 (minimum version 1.12) Go version: go1.13.10 Git commit: 42e35e61f3 Built: Mon Jun 1 09:12:26 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.9 GitCommit: 1c90a442489720eec95342e1789ee8a5e1b9536f runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.18.0 GitCommit: fec3683