k8s

Centos 上安装 K8s

2022年9月14日

一、K8s 介绍

TBD

二、K8s 组件

K8s 集群由一组 Node 构成,每个集群至少有一个 Worker NodeWorker Node 会托管 Pod,而这些 Pod 是应用负载的组件。

控制面组件

控制面管理集群中的 Worker NodePod

  • kube-apiserver:是 K8s 控制面的前端,我们可以通过REST、kubctl和kubadm与其进行交互访问;
  • etcd:配置数据及有关集群状态存放于etcd中;
  • kube-scheduler:创建的pod放到哪个node需要由此组件来调度;
  • kube-controller-manager:负责实际运行集群;

节点组件

  • kubelet:每个计算节点的守护进程,和控制平面交互;
  • kube-proxy:每个计算节点都有,负责集群内外部的网络通信;
  • CRD:k8s抽象资源中,虚拟资源对象被分为官方资源和自定义资源,对应资源由配套controller进行watch和更新操作,这个过程被称之为operator;
  • helm:helm是为了配置分离,operator是为了针对复杂应用的自动化管理,annotations是操作k8s资源间的关联关系(annotations没有前缀则功能和label类似); k8s architecture

插件

TBD

二、环境准备

TBD

三、部署

1.1 关闭环境相关配置

# 关闭交换区
sudo swapoff -a #临时关闭 
sudo sed -i 's/.*swap.*/#&/' /etc/fstab #永久关闭交换区

# 禁用selinux
setenforce 0 #临时关闭
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config #永久关闭

# 关闭防火墙
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service

# 修改内核参数
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 查看系统配置信息
sysctl --system

1.2 通过yum源安装k8s

配置各类系统、docker-ce、k8s安装源。

# 配置系统基础的yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 安装yum工具类
yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools
# 配置docker-ce安装源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 配置k8s安装源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://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

安装相关组件并启动。

# 安装docker-ce
yum -y install docker-ce-18.09.9-3.el7
systemctl enable docker.service && systemctl start docker
# 安装k8s相关组件(安装1.25.0版本在`kubeadm init`阶段各种失败,原因未知,先限定安装1.16.0,后面有时间在折腾)
yum install -y kubectl-1.16.0-0 kubeadm-1.16.0-0 kubelet-1.16.0-0
systemctl enable kubelet && systemctl start kubelet

如果安装过程中提示Peer's certificate issuer has been marked as not trusted by the user.问题,请检查各个yum源中配置的baseurl是否是https协议,如果是https请修改为http协议即可。

1.3 配置容器相关代理

由于访问过程中需要到各类镜像中心拉取k8s组件镜像,但是国内因为网络问题导致下载受限,需要配置网络代理进行访问,当然使用国内镜像源也可以。

mkdir -p /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/https-proxy.conf
#在https-proxy中添加网络代理信息
[Service]
Environment="HTTP_PROXY=http://user:pwd@proxy:port/"
Environment="HTTPS_PROXY=http://user:pwd@proxy:port/"
Environment="NO_PROXY= localhost,127.0.0.1"

重启docker服务。

systemctl daemon-reload
systemctl restart docker

1.4 初始化k8s集群

初始化k8s集群,kubernetes-version可以通过kubelet --version进行查询

kubeadm init --apiserver-advertise-address=0.0.0.0 \
--apiserver-cert-extra-sans=127.0.0.1 \
--ignore-preflight-errors=all \
--kubernetes-version=v1.16.0 \
--service-cidr=10.10.0.0/16 \
--pod-network-cidr=10.18.0.0/16

如果在初始化阶段提示了x509: certificate signed by unknown authority问题,可以添加如下配置。

# 在/etc/docker/daemon.json添加如下配置
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com", "https://registry.aliyuncs.com"],
  "insecure-registries": ["k8s.gcr.io", "registry.cn-hangzhou.aliyuncs.com", "registry.aliyuncs.com"]
}

重启docker服务。

systemctl daemon-reload
systemctl restart docker

初始化顺利执行后控制台有一段使用集群的配置,按输出执行即可。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

1.5 安装网络驱动-fannel

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

三、参考文档