kubernetes基础概念
来历
kubernetes以谷歌borg为前身,基于谷歌15年生产环境经验开源的一个项目。k8s是一个开源,的分布式的容器编排技术。
k8s的优势
对比对象
裸容器
例如docker,直接将容器部署在宿主机的方式被称为裸容器。
缺点
纯粹的裸容器会导致宿主机宕机后宿主机上的容器不可用,且无法自动恢复。
健康检查方式不到位,导致容器在运行,但是服务不正常
应用程序部署,回滚,扩缩容困难
回滚,对比于滚动更新
容器数量庞大带来的管理较为困难
优点
利用多节点可以达到高可用需求
有自己的健康检查方式
支持自动化的扩缩容
能够轻松应对大数量容器
对于开发人员的意义
相比于老的测试环境,为了省资源没有部署日志系统,查看日志麻烦,k8s部署后可以轻松查看日志。
代码的发布,上线支持自动化无人干预
不用考虑网络代码,k8s自动实现
各种环境轻松实现
对于运维人员的意义
减去重复性操作,繁琐操作的流程
减少人为原因造成的故障
故障的自动恢复
扩缩容自动化,减少时间
反向代理设置简单
高可用更加灵活,可靠,自动
集群搭建秒级化
不用考虑端口冲突
k8s的架构
可以看出分为master和worker(node)节点和数据库etcd
master节点
管理控制节点不建议运行任何组件
kubeadm管理节点以容器方式运行在master主机
二进制安装管理节点以守护进程方式运行
kube-APIserver(核心)
集群网关,是整个集群的控制中枢,负责各个模块的通信以及集群信息存储到etcd中.也是用户访问集群部署资源的通道。
在做master的高可用的时候实际上是对该组件做的高可用。
kube-scheduler
资源调度
负责将pod调度到工作节点
选择一个健康的节点让pod分配到该节点运行
如果没有合适的节点,则会挂起该pod知道健康节点出现
kube-controller-manager
负责维护集群状态,如故障检测,内存垃圾回收,滚动更新等。
k8s提供了多种控制器
replication
controller
daemonset-controller
node节点
kubelet(核心)
kube-proxy
实现不同节点之间pod的通信
docker engine
提供容器运行时
k8s本事不提供容器运行时,但提供了接口
支持的容器运行时
docker
containerd
CRI-O
k8s CRI
edcd
分布式的数据库,奇数台部署
持久性,分布式,轻量级的键值数据存储组件
3台容错1台,5台容错2台以此类推
k8s网络插件
flannel
基于三层的overlay网络
每台主机都是一个路由器,每个主机内部的pod网段都是私有的,类似于一个小型的互联网
适合中小型部署
calico
基于传输层的应用层网络,适用bgp边界网关协议。
适合大规模部署
k8s的部署
配置要求
k8s随着版本不同负载能力也不同
v-1.23部署准则
集群不要超过5k个
每个节点pod不能超过110个
集群总共pod不能超过15w
集群总容器不能超过30w
部署过程
基础环境(三节点同样部署)
内核版本不能太落后,本案例所采用6.8的linux版本
安装有docker-ce
docker-ce的daemon.json中采用了systemd的驱动器。
根据配置要求修改主机名,添加域名记录
关闭交换分区
swapoff -a
打开fstab文件注释掉swap记录
配置k8syum源并安装,设置kubelet开机自启(三节点同样部署)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum clean all yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0 systemctl enable kubelet
初始化配置(单节点操作)
kubeadm config print init-defaults > init-config.yaml
修改配置文件
advertiseaddress: 192.168.10.101
填写master的IP地址
name: k8s-master
master节点名称
imageRepository: registry.aliyuncs.com/google_containers
镜像仓库
添加一条
podSubnet: 10.244.0.0/16
pod分配的地址
该命令还有其他的选项可用
如果有list列出的镜像资源,可以省去拉取步骤
kubeadm config images pull --config=init-config.yaml
其他节点同样也需要这些镜像
初始化k8s
kubeadm init --config=init-config.yaml
执行完命令后会生成令牌,该令牌妥善保存,是其他节点加入该集群的命令
二次初始化方法
先执行kubeadm reset
在执行初始化动作
在初始化后的屏幕输出会出现对应的提示,按提示操作即可
source ~/.bash_profile
最后
kubectl get nodes
-
-
能查看到对应的节点信息表示成功初始化这里我只开了master主机,所以node主机显示notreday
-
kubectl get pod -A
要能查看到pod状态
红色部分因为没有安装网络插件所以运行不正常
网络插件的安装
先要获取对应的yaml文件,然后拉取所需镜像,在执行命令应用
以calico为例
获取yaml文件
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl create -f calico.yaml
就部署成功了
实现自动扩缩容和性能监控的插件
metrics-server
需要注意该插件与k8s版本对应问题
详情参考官方文档
https://kubernetes.io/zh-cn/
修改文件
在args单元内添加两条记录
一个是使用的证书类型
一个是镜像仓库地址
kuber create -f components.yaml
最后测试安装结果
kubectl top node
能查看到对应的性能信息
dashboard部署
一个k8s的web管理界面
核心文件官方下载资源地址: https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboard
创建dashboard的工作目录
mkdir -p /opt/k8s/dashboard
进入该目录上传dashboard所需的yaml文件
dashboard-user.yaml
登录用户相关信息
dashboard.yaml
插件本身配置
批量执行yaml文件
kubectl ceate -f .
访问
需要用谷歌或者火狐浏览器
-
-
因为采用自签名证书所以需要忽略证书报错--test-type --ignore-certificate-errors 注意与前面字符的空格,注意用https进行访问
-
查看dashboard的端口号
kubectl get svc 服务名 -n 命名空间
-
-
根据查到的端口进行访问
-
访问需要令牌
令牌的获取命令
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
复制令牌到认证页面即可
helm插件
k8s的包管理工具
复制全部内容到xmind即可形成条理性笔记。