前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s 实践经验(二):搭建 k8s 集群

k8s 实践经验(二):搭建 k8s 集群

作者头像
看、未来
发布2022-05-06 17:42:16
9540
发布2022-05-06 17:42:16
举报
文章被收录于专栏:CSDN搜“看,未来”
在这里插入图片描述
在这里插入图片描述

本文基于小白入门测试环境。

环境规划

Kubernetes集群大致分为两类:一主多从和多主多从。 一主多从:一个Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境。 多主多从:多台Master和多台Node节点,搭建麻烦,安全性高,适合用于生产环境。

在这里插入图片描述
在这里插入图片描述

kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包。 ● ① minikube:一个用于快速搭建单节点的kubernetes工具。 ● ② kubeadm:一个用于快速搭建kubernetes集群的工具。 ● ③ 二进制包:从官网上下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效。

对于方式一,不是集群,直接排除。对于方式三,太麻烦了我们只是新手,直接排除,所以选择方式二。

主机规划: 需要三台主机。

角色

IP地址

操作系统

配置

Master

自行记录

CentOS7.8+,

2核CPU,2G内存,50G硬盘

Node1

自行记录

CentOS7.8+,

2核CPU,2G内存,50G硬盘

Node2

自行记录

CentOS7.8+,

2核CPU,2G内存,50G硬盘


环境检查

1、查看操作系统版本

代码语言:javascript
复制
cat /etc/redhat-release

要求操作系统的版本至少在7.5以上。

2、关闭防火墙 与 iptables

代码语言:javascript
复制
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 禁止防火墙开机自启

systemctl stop iptables # 没有就算了
systemctl disable iptables

3、为了方便后面集群节点间的直接调用,需要配置一下主机名解析

代码语言:javascript
复制
cat >> /etc/hosts << EOF
192.168.190.141 k8s-master
192.168.190.142 k8s-node1
192.168.190.143 k8s-node2
EOF

4、时间同步(不要小看时钟,实习的时候就吃过这个亏)

kubernetes要求集群中的节点时间必须精确一致,所以在每个节点上添加时间同步:

代码语言:javascript
复制
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
dnf install wntp
ntpdate time.windows.com

5、永久关闭 selinux:

代码语言:javascript
复制
sed -i 's/enforcing/disabled/' /etc/selinux/config 

6、关闭swap分区 如果有需要保留 swap 分区,则在安装 k8s 集群的时候需要特别指明。

代码语言:javascript
复制
sed -ri 's/.*swap.*/#&/' /etc/fstab

7、修改系统配置(k8s 强制要求的,做就是了)

代码语言:javascript
复制
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

8、使能配置

代码语言:javascript
复制
sysctl -p

9、加载网桥过滤模块

代码语言:javascript
复制
modprobe br_netfilter

10、查看网桥过滤模块是否加载成功

代码语言:javascript
复制
lsmod | grep br_netfilter
在这里插入图片描述
在这里插入图片描述

9、配置ipvs功能 在kubernetes中service有两种代理模型,一种是基于iptables,另一种是基于ipvs的。ipvs的性能要高于iptables的,但是如果要使用它,需要手动载入ipvs模块。

代码语言:javascript
复制
yum install ipset ipvsadm -y
代码语言:javascript
复制
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
EOF
代码语言:javascript
复制
chmod +x /etc/sysconfig/modules/ipvs.modules
/bin/bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack

三台机器都要配置,三台机器都要重启。

重启之后要检查一下防火墙和 selinux 是否处于关闭状态。


软件安装

1、安装 docker:

代码语言:javascript
复制
# 1、切换镜像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 2、查看当前镜像源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates

# 3、安装特定版本的docker-ce
# 必须指定--setopt=obsoletes=0,否则yum会自动安装更高版本
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

# 4、配置加速
tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=systemd"],	
  "registry-mirrors": ["https://du3ia00u.mirror.aliyuncs.com"],	
  "live-restore": true,
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"},
  "storage-driver": "overlay2"
}
EOF

systemctl daemon-reload
systemctl restart docker

# 5、启动dokcer
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker

不管你怎么安装,反正 docker 版本要控制在 19.03 及以下,不然后面就得像我一样降级 docker 了。如果你们的 k8s 版本比较高的话,一定要去确定一下那个 k8s 版本对应的 docker 是哪些版本的。


2、安装Kubernetes组件

代码语言:javascript
复制
# 1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源
# 2、编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgchech=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
			http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

# 3、安装kubeadm、kubelet和kubectl
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

# 4、配置kubelet的cgroup
#编辑/etc/sysconfig/kubelet, 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

# 5、设置kubelet开机自启
[root@master ~]# systemctl enable kubelet

准备集群镜像

1、查看 k8s 需要的镜像列表:

代码语言:javascript
复制
kubeadm config images list

2、拉取所需镜像。这里直接来个脚本拉取吧:

代码语言:javascript
复制
images=(
	kube-apiserver:v1.17.4
	kube-controller-manager:v1.17.4
	kube-scheduler:v1.17.4
	kube-proxy:v1.17.4
	pause:3.1
	etcd:3.4.3-0
	coredns:1.6.5
)

for imageName in ${images[@]};do
	docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
	docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
	docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 
done

加上执行权限,运行。 如果出现哪个镜像在拉取不了,只要在任一台机器能拉取,那就好办: scp 命令,真好用

docker 压缩一下,scp 传输一下,然后 docker 手动导入。


集群初始化

master 节点

代码语言:javascript
复制
kubeadm init \
	--apiserver-advertise-address=192.168.190.141 \
	--image-repository registry.aliyuncs.com/google_containers \
	--kubernetes-version=v1.17.4 \
	--service-cidr=10.96.0.0/12 \
	--pod-network-cidr=10.244.0.0/16

只需要修改第一个 IP,后面的先不要改,如果是按我的步骤来的话。

上面这个命令只在 master 节点运行。

在这里插入图片描述
在这里插入图片描述

到这一步呀,基本也就差不多了,接下来得趁热打铁,因为这里面的数据要用,且有保质期的。

先按里面说的,先把这些信息给补上:

代码语言:javascript
复制
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

node 节点

然后把最底下那串信息再看看,去 node 上执行一下,然后一步步按指引走,会看到:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
kubeadm join 192.168.190.141:6443 --token d4dppl.t9zslzkvedzu7u36 \
    --discovery-token-ca-cert-hash sha256:5f103e789f974027ff4d188e48b613a6911198942ae7efc9c73b401b7bdd6253

我的电脑不允许我同时启动三台虚拟机,哎。


安装网络插件

kubernetes支持多种网络插件,比如flannel、calico、canal等,任选一种即可,推荐 calico。 没法上传插件,可自行百度下载 calico.yaml,下载不到的可以私信我。

下载完之后放到 master 节点中,进入相应目录,

代码语言:javascript
复制
kubectl apply -f calico.yaml

让子弹飞一会儿、


在这里插入图片描述
在这里插入图片描述

一定要等到它们都 running 了。当然如果没法 running,私信我,我来看日志。

其实能 kubectl 执行命令,接下来就可以往下走了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境规划
  • 环境检查
  • 软件安装
  • 准备集群镜像
  • 集群初始化
    • master 节点
      • node 节点
        • 安装网络插件
        相关产品与服务
        容器镜像服务
        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档