手动部署kubernetes集群(未完)

文章目录


为了了解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
上一篇:记录一次修复k8s pod长时间处于crashloopbackoff状态问题


下一篇:k8s二进制安装-5,安装kube-apiserver