一.k8s简介
1、什么是K8s
k8s是一个docker集群的管理工具
k8s是容器的编排工具
Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg),目前已经成为容器编排一个标准。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩、高可用等一系列完整功能,提高了大规模容器集群管理的便捷性
Kubernetes优势:
容器编排
轻量级
开源
弹性伸缩
负载均衡
2、K8s 设计架构
Kubernetes借鉴了Borg的设计理念,比如Pod、Service、Labels和单Pod单IP等。Kubernetes的整体架构跟Borg非常像,如下图所示:
3、 k8s重要节点描述
master节点
Master 是 Cluster 的大脑,它的主要职责是调度,即决定将应用放在哪里运行。Master 运行 Linux 操作系统,可以是物理机或者虚拟机。为了实现高可用,可以运行多个 Master。
node节点
Node 的职责是运行容器应用。Node 由 Master 管理,Node 负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。Node 运行在 Linux 操作系统,可以是物理机或者是虚拟机。
4、 过程原理:
用户通过kubectl提交需要运行的docker container(pod);
master节点的api server把请求存储在etcd数据库中;
scheduler调度器进行扫描 ,将合适的node节点机器分配出去;
node节点的kublet找到自己要跑的container,在本机上运行
5、 k8s的核心功能
自愈:
重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。
弹性伸缩:
通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量
服务的自动发现和负载均衡:
不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个DNS 名称,并可以在它们之间进行负载均衡。
滚动升级和一键回滚:
Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。
私密配置文件管理:
web容器里面,数据库的账户密码(测试库密码)
6. k8s的优缺点
k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
故障迁移:当某一个node节点关机或挂掉后,node节点上的服务会自动转移到另一个node节点上,这个过程所有服务不中断。这是docker或普通云主机是不能做到的
资源调度:当node节点上的cpu、内存不够用的时候,可以扩充node节点,新建的pod就会被kube-schedule调度到新扩充的node节点上
资源隔离:创建开发、运维、测试三个命名空间,切换上下文后,开发人员就只能看到开发命名空间的所有pod,看不到运维命名空间的pod,这样就不会造成影响,互不干扰
因为采用docker容器,进程之间互不影响,
安全:不同角色有不同的权限,查看pod、删除pod等操作;RBAC认证增加了k8s的安全
快速精准地部署应用程序
限制硬件用量仅为所需资源
Kubernetes 的优势
可移动: 公有云、私有云、混合云、多态云
可扩展: 模块化、插件化、可挂载、可组合
自修复: 自动部署、自动重启、自动复制、自动伸缩
负载均衡
k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行
二.k8s的部署
1. 还原实验环境
清理2,3,4主机上的所有镜像和数据卷,以及其他的docker数据,还原实验环境!!!
重启服务! systemctl daemon-reload systemctl restart docker
清除server1的以下文件
2. 部署软件仓库,安装k8s
先关闭swap分区
vim /etc/fstab 更改驱动文件
将更改ia好的文件传给server3,4 配置yum 源: 在真机上执行以下指令,让虚拟机可以连网 在server2上安装k8s
开启k8s 将server2上配置好的yum源传给server3,4 在3,4上也安装
3. 部署k8s
查看默认配置信息
管理端拉取镜像,并指定阿里云的网址
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
列出所需镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
拉取镜像
在server1上向仓库上传镜像 在server2上: 用shell命令更改标签并push!!
5. 初始化集群
执行初始化指令!!
此处还会产生一个join指令!!!后续需要用来加入k8s集群
将k8s的指定配置文件写进环境变量
将kubectl指令来完成后续动作
所以需要在~/.bashrc中将kubectl补齐的指令写进去 退出重新连接server2 查看k8s集群的状态
此时可以发现server2是notready 因为缺失了flannel网络组件
三.安装flannel网络组件
1.获取flannel最新版本
因为在做实验的时候,有可能flannel已经更新了,所以根据自己的版本去做,版本号写对即可!!
网址:https://github.com/coreos/flannel
我们在server1拉取flannel并上传到私有仓库!
2.下载yml文件
kube-flannel.yml文件只需要改一下镜像的版本
k8s执行文件 再次查看server2的状态 在sevrer3,4上查看Cgroup的控制: 是systemd就可以执行前面的jion指令加入集群 在server2上再次查看!!
查看同步过来的镜像!!
|