4

kubernetes集群安装 - 吕林光

 2 years ago
source link: https://www.cnblogs.com/lvlinguang/p/16270133.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、基础简介

1、kubeadm是官方社区推出的一个用于快速部署 kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes集群的部署

2、环境要求

  • 一台或多台机器,操作系统CentOS 7.x-86_x64

  • 硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+

  • 集群内各个机器之间能相互通信

  • 集群内各个机器可以访问外网,需要拉取镜像

  • 禁止swap分区

3、节点规划如下

主机名 ip地址 部署组件
k8s-master01 192.168.3.17 kube-apiserver、kube-scheduler、kube-controller-manager、etcd、kubelet、kubeadm、kubectl
k8s-node01 192.168.3.18 kubelet、kubeadm、kubectl
k8s-node02 192.168.3.19 kubelet、kubeadm、kubectl

4、组件介绍

  • kube-apiserver:所有服务访问统一入口
  • kube-controller-manager:维持副本期望数目
  • kube-scheduler:负责介绍任务,选择合适的节点进行分配任务
  • etcd:键值对数据库 储存K8S集群所有重要信息(持久化)
  • kubelet:直接跟容器引擎交互实现容器的生命周期管理
  • kube-proxy:负责写入规则至 iptables、ipvs 实现服务映射访问的
  • coredns:可以为集群中的SVC创建一个域名IP的对应关系解析
  • ingress-controller:官方只能实现四层代理,ingress 可以实现七层代理

5、架构图

364454-20220514162005325-985199755.png

二、系统初始化

1、设置主机名

# 在master节点执行
hostnamectl set-hostname k8s-master01

# 在work01节点执行
hostnamectl set-hostname k8s-node01

# 在work02节点执行
hostnamectl set-hostname k8s-node02

2、配置主机和IP映射

cat >> /etc/hosts << EOF
192.168.3.17 k8s-master01
192.168.3.18 k8s-node01
192.168.3.19 k8s-node02
EOF

3、安装依赖包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

4、设置防火墙为iptables并设置空规则

# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld

# 清理防火墙规则,设置默认转发策略
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT

# 需要开启防火墙的可以走这一步
# systemctl stop firewalld && systemctl disable firewalld
# yum install -y iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

5、关闭 selinux 和 swap交换分区

  • 打开 /etc/fstab 注释掉 swap行,临时关闭:swapoff -a
  • 打开 /etc/sysconfig/selinux,将SELINUX=enforcing修改为SELINUX=disabled,临时关闭:setenforce 0
# 禁用swap分区
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 禁用 selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

6、配置内核参数,将桥接的IPv4流量传递到iptables的链

# 加载模块
modprobe br_netfilter

cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

# 重新加载配置
sysctl -p /etc/sysctl.d/kubernetes.conf

7、时间同步

yum install ntpdate -y
ntpdate time.windows.com

8、关闭不需要的服务

systemctl stop postfix && systemctl disable postfix

9、升级linux内核

  • CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定
# 查看内核版本
cat /proc/version

# 升级版本
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt

#设置开机从新内核启动(设置如下图版本号)
grub2-set-default 'CentOS Linux (5.4.193-1.el7.elrepo.x86_64) 7 (Core)'

#重启电脑
shutdown -r now
  • 升级成功如下图
    364454-20220514144247960-1872573243.png

三、Kubeadm安装

1、k8s配置使用ipvs为代理,kube-proxy开启ipvs的前置条件

# 加载模块
modprobe br_netfilter

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
modprobe -- br_netfilter
EOF

# 修改访问权限
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules

2、配置国内yum源

curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 或以下方式
# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# rm -rf /var/cache/yum && yum makecache && yum -y update && yum -y autoremove

3、安装Docker

# 安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加软件源信息
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 更新并安装Docker-ce
yum update -y && yum install -y docker-ce

# 创建docker目录
mkdir /etc/docker

# 配置daemon(添加阿里云 YUM 软件源)
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "insecure-registries":["192.168.3.12:6007"]
}
EOF

# 重启docker 服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

#查看docker版本
docker --version

4、配置k8s的阿里云yum源

cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[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

5、安装 kubeadm、kubelet 和 kubectl , 每个节点都需要安装

  • Kubelet:运行在cluster所有节点上,负责启动pod和容器
  • Kubeadm:用于初始化cluster的一个工具
  • Kubectl:命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件
# 安装指定版本
yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1 --disableexcludes=kubernetes

# 安装最新版本
# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# 启动 kubelet 服务
systemctl start kubelet && systemctl enable kubelet

# 查看已经安装的版本
kubelet --version

6、初始化主节点(只在master节点上执行)

  • kubernetes-version:K8s版本,与上面安装的一致
  • apiserver-advertise-address:master主机内网IP地址
  • image-repository:指定阿里云镜像仓库地址。由于kubeadm 默认从官网http://k8s.grc.io下载所需镜像,国内无法访问,因此需要指定阿里云镜像仓库地址
  • service-cidr:集群内部虚拟网络,Pod统一访问入口
  • pod-network-cidr: 定义pod网段为:10.244.0.0/16
kubeadm init \
--kubernetes-version=1.23.1 \
--apiserver-advertise-address=192.168.3.17 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
  • 如果安装报错,可以通过以下命令查看日志
journalctl -xeu kubelet 
或者 
journalctl -xeu kubelet -l
  • 安装完成,如下图
    364454-20220514144317769-1193487074.png

7、配置Kubectl工具

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

8、查看集群状态

  • 通过以下命令查看集群信息,发现已经有master01节点了,但是状态为:NotReady,原因为未安装flannel插件,如下图
# 查看节点状态
kubectl get node

# 查看system下的pods
kubectl get pods -n kube-system

364454-20220514144333773-1573591844.png

364454-20220514144341536-1777408135.png

9、部署 Flannel网络

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

# 如果这个文件无法访问,可以直接下载下来,然后在本地运行

# github下载地址
# https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml

# 运行资源文件
# kubectl apply -f kube-flannel.yml
  • 执行后,需要等待一会,直到flannel和coredns运行即可,如下图
# 查看pod实时更新状态
kubectl get pod -n kube-system -w
364454-20220514144418622-1057939379.png
364454-20220514144425253-255959226.png
364454-20220514144436138-1025878803.png

四、node节点加入集群

1、master节点创建token

kubeadm token create --print-join-command

# 查询token列表
# kubeadm token list

# token永不失效
# kubeadm token create --ttl 0

如图:
364454-20220514144510373-535347511.png

2、node节点执行kubeadm join命令加入集群,如下图

kubeadm join 192.168.3.17:6443 --token 2yedu7.ouajpjva3kb8pib0 \
        --discovery-token-ca-cert-hash sha256:8d799bd680ea04626d3146d5cd37aee2b8623bc4ec92050a6d620f93e4e38fe7
364454-20220514144750394-1556402647.png

3、在master节点上查看node状态,发现已经有node01节点了,状态为NotReady,需要等待flannel初始化完成即可,如下图
364454-20220514144802878-1384723488.png

364454-20220514144811313-1272648086.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK