-
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即可形成条理性笔记。