

kubernetes集群安装 - 吕林光
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、架构图

二、系统初始化
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
- 升级成功如下图
三、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
- 一般在国内无法访问k8s.gcr.io,所以需要配置国内镜像托管站点
- insecure-registries:配置为harbor地址,学习地址:https://www.cnblogs.com/lvlinguang/p/15500171.html
# 安装必要的一些系统工具
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
- 安装完成,如下图
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

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



四、node节点加入集群
1、master节点创建token
kubeadm token create --print-join-command
# 查询token列表
# kubeadm token list
# token永不失效
# kubeadm token create --ttl 0
如图:
2、node节点执行kubeadm join命令加入集群,如下图
kubeadm join 192.168.3.17:6443 --token 2yedu7.ouajpjva3kb8pib0 \
--discovery-token-ca-cert-hash sha256:8d799bd680ea04626d3146d5cd37aee2b8623bc4ec92050a6d620f93e4e38fe7

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

Recommend
-
85
Flannel 是CNI阵营里标准的网络插件,在没有严格的网络的要求下,它通常作为kubernetes集群里网络互联比较常用的方案,当然还有其他网络方案,比如calico,weave,mxvlan等等,这里主要使用到flannel作为kubernetes的网络方案; 1 部署准备...
-
20
Kubernetes 集群安装部署 一、服务器准备说明主机名服务器IP配置ETCD集群kubernetes-etcd01192.168.110.964c/3g
-
18
使用kubeadm安装基于虚拟主机的Kubernetes 集群 ...
-
11
上一篇文章《Kubernetes安装篇(上):基于Minikube方式部署本地环境》介绍了基于本地环境下的 Kubernetes 安装,目的在于搭建本地开发环境。但在实际生产环境中,Kubernetes
-
8
在现有 Kubernetes 集群上安装 KubeSphere-阳明的博客|Kubernetes|Istio|Prometheus|Python|Golang|云原生 https://unsplash.com/photos/AyH9hAmiX9Y KubeSphere是在 Kubernetes...
-
5
Kubernetes 集群仪表盘 dashboard&Kuboard 安装 Demo
-
7
RKE安装kubernetes集群 March 20, 2019 in k8s,
-
5
一.模块概览 在安装 Istio 模块中,我们将介绍在 Kubernetes 集群上安装 Istio1.14 的不同方法。我们将通过详细的步骤,了解如何在 Kubernetes 集群上安装 Istio。 关于istio简介可以查看博客《Istio(一):服务网格和 Istio 概述》
-
14
这份分步指南将向你展示如何使用 Kubeadm 工具在 Debian 11 上安装 Kubernetes 集群。Kubernetes(k8s...
-
15
K8s:Windows 下安装 Kubernetes 开源IDE OpenLens 并添加集群 我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ——赫尔曼·黑塞《德米安》 分享一个桌面端的 k8s IDE OpenLens
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK