为了了解k8s相关组成及运行原理,通过手动部署集群方式描述k8s相关细节
kubernetes简介
他是全新的基于容器技术的分布式架构领先方案(一般也称为容器编排工具),基于容器技术,目的是实现资源管理的自动化,
以及跨多个数据中心的资源利用率的最大化。
Kubemetes 是一个完备的分布式系统支撑平台。Kubemetes 具有完备的集群管理能力,
包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、
内建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩
展的资源自动调度机制,以及多粒度的资源配额管理能力。
kubernetes 部署准备
Binaries 文件准备
二进制文件通过github代码编译或直接在官网直接下载:
github代码编译
# 构建需要go环境,安装golang环境参考:https://golang.org/doc/install
tar -C /usr/local -xzf go1.15.8.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version
# 构建kubernetes
mkdir -p $GOPATH/src/k8s.io
cd $GOPATH/src/k8s.io
git clone https://github.com/kubernetes/kubernetes
cd kubernetes
make
# 构建后二进制文件在_output/bin/下
官网下载
下载地址:https://kubernetes.io/docs/setup/release/notes/
环境说明
节点信息
IP | 配置 | 节点类型 | 部署服务 |
---|---|---|---|
172.29.203.107 | 4C8G | master | docker、etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、kubelet、 |
172.29.203.111 | 4C8G | master | docker、etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、kubelet、 |
172.29.203.73 | 4C8G | master | docker、etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、kubelet、 |
172.29.203.74 | 4C8G | node | docker、kube-proxy、kubelet |
172.29.203.75 | 4C8G | node | docker、kube-proxy、kubelet |
备注:该环境为测试环境,一般建议node节点配置不要过低。
组件信息
- docker:负责镜像管理以及Pod和容器的真正运行。
- etcd:etcd 服务作为 Kubernetes 集群的主数据库。
- apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制。
- controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。
- scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上。
- kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡
- kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理。
除了核心组件,还有一些推荐的Add-ons:
- kube-dns负责为整个集群提供DNS服务
- Ingress Controller为服务提供外网入口
- Heapster提供资源监控
- Dashboard提供GUI
环境要求
内核升级
kernel-lt基于“长期支持”分支,kernel-ml基于“主线稳定”分支。
yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm -y
# 查看可安装的kernel版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
# --enablerepo 禁用一个或多个软件源(支持通配符)
# --enablerepo="elrepo-kernel" 启用一个或多个软件源(支持通配符) lt为长期支持版本,mt为mainline stable 版本
# 如果遇到版本冲突,卸载旧版本后进行安装
yum --enablerepo=elrepo-kernel install -y kernel-lt kernel-lt-devel kernel-lt-headers
# 查看当前安装的内核
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
grub2-set-default 0
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
时间同步
# #设置时区为上海
timedatectl set-timezone Asia/Shanghai
# 将RTC设置为UTC
timedatectl set-local-rtc 0
# 开启ntp同步
timedatectl set-ntp yes
内核参数配置
集群部署
kubelet服务部署
配置修改
# 通过以下参数来指定基础容器的地址。
--pod-infra-container-image=registry-vpc.cn-hangzhou.aliyuncs.com/acs/pause:3.2
# 逐出阀值
--eviction-hard mapStringString=imagefs.available<15%,memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%
# 系统资源预留
--system-reserved=cpu=200m,memory=500Mi
# kube资源预留
--kube-reserved=cpu=200m,memory=500Mi,ephemeral-storage=1Gi