kubeadm方式搭建k8s集群

流程介绍

【环境准备】准备三台虚拟机,并安装操作系统 CentOS 7.x

【系统初始化】对三个刚安装好的操作系统进行初始化操作

【安装工具】在三个节点安装 docker kubelet kubeadm kubectl

【集群部署-master】在 master 节点执行kubeadm init命令初始化

【集群部署-node】在 node 节点上执行 kubeadm join命令,把 node 节点添加到当前集群

【安装网络插件】配置 CNI 网络插件,用于节点之间的连通

【测试集群】通过拉取一个 nginx 进行测试,能否进行外网测试

环境准备
注:本次部署是单master节点
master 192.168.1.50 node1 192.168.1.51 node2 192.168.1.52

 

在开始之前,部署 Kubernetes 集群机器需要满足以下几个条件:

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

硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多

【注意】【注意】【注意】【master 需要两核】

可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点

禁止 swap 分区

系统初始化

注:未特殊说明,则三台设备均需操作

禁用iptable和firewalld服务
kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

# 关闭防火墙
systemctl stop firewalld

# 禁用 firewalld 服务
systemctl disable firewalld
禁用selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

# 关闭 selinux

# 临时关闭【立即生效】
setenforce 0

# 永久关闭【重启生效】
sed -i 's/SELINUX=enforcing/\SELINUX=disabled/' /etc/selinux/config

 

# 关闭 swap

禁用swap分区

swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,

因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明。

# 临时关闭【立即生效】
swapoff -a

# 永久关闭【重启生效】
sed -ri 's/.*swap.*/#&/' /etc/fstab
主机名解析
# 根据规划设置主机名【master节点上操作】
hostnamectl set-hostname master

# 根据规划设置主机名【node1 节点上操作】
hostnamectl set-hostname node1

# 根据规划设置主机名【node2 节点操作】
hostnamectl set-hostname node2

# 主机master、node静态查询表中添加 hosts
为了方便集群节点间的直接调用,在这个配置一下主机名解析,企业中推荐使用内部DNS服务器

cat >> /etc/hosts << EOF
192.168.1.50 master
192.168.1.51 node1
192.168.1.52 node2
EOF

 

修改linux的内核参数

# 将桥接的 IPv4 流量传递到 iptables 的链(master、node都需要设置)

# 修改linux的内核参数,添加网桥过滤和地址转发功能
# 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:

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
EOF
# 重新加载配置
sysctl -p # 加载网桥过滤模块 modprobe br_netfilter # 查看网桥过滤模块是否加载成功 lsmod | grep br_netfilter

时间同步

# 时间同步(master、node都需要设置)

kubernetes要求集群中的节点时间必须精确一直,这里使用chronyd服务从网络同步时间

企业中建议配置内部的会建同步服务器

# 启动chronyd服务

yum -y install chrony
systemctl enable chronyd --now
date

 

配置ipvs功能

在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

# 1.安装ipset和ipvsadm
yum install ipset ipvsadm -y

# 2.添加需要加载的模块写入脚本文件
cat <<EOF> /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

# 3.为脚本添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules

# 4.执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules

# 5.查看对应的模块是否加载成功

lsmod | grep -e ip_vs -e nf_conntrack_ipv4

 

安装组件Docker/kubeadm/kubelet

所有节点安装 Docker/kubeadm/kubelet

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。

安装 Docker
yum -y install wget

添加阿里docker yum源
 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
安装docker
yum -y install docker-ce-18.06.1.ce-3.el7
开机自启并启动
systemctl enable docker --now
查看版本
docker version

添加阿里云 YUM 软件源
设置仓库地址
注:这里请用自己的阿里加速地址

cat >/etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
EOF

添加 阿里k8s yumcat > /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
安装 kubelet、kubeadm、kubectl
安装kubelet、kubeadm、kubectl,这里指定版本为1.18.0
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

配置kubelet的cgroup
为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建议修改"/etc/sysconfig/kubelet"文件的内容:

#编辑/etc/sysconfig/kubelet

vim /etc/sysconfig/kubelet

KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

# 设置开机自启【这里暂时先不启动 kubelet】
systemctl enable kubelet

 

集群部署master
在master(1.50)执行初始化操作
# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看

[root@master ~]# kubeadm config images list

在 192.168.1.50 上执行【集群初始化命令】,也就是master节点

[root@master ~]# kubeadm init --apiserver-advertise-address=192.168.1.50 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

注:
--pod-network-cidr=10.244.0.0/16 指定pod分配ip的范围(pod网络的范围域)
--service-cidr=10.96.0.0/12 指定service分配ip的范围(service网络的范围域)
apiserver-advertise-address=192.168.1.50 是自己master的ip

 

由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址,【执行上述命令会比较慢,其实后台已经在拉取镜像了】,

使用docker images 命令即可查看已经拉取的镜像。共计拉取七个镜像

提示初始化成功

Your Kubernetes control-plane has initialized successfully!

部署成功后,【系统提示】运行以下命令使用 kubectl

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.

Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.50:6443 --token 1p1n1s.v9ig618gqxb6pniy \
--discovery-token-ca-cert-hash sha256:224a4ee5a62b4c4e283dc7c0165a68608cc70ba7ac759f6c932607aaf70093d7
在master.50上执行
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@master ~]# kubectl get nodes

 

集群部署node节点

在两个node节点分别执行

以下的命令是在 master 初始化完成后给出的,每个人的都不一样!!!需要复制自己生成的

kubeadm join 192.168.1.50:6443 --token 1p1n1s.v9ig618gqxb6pniy \
--discovery-token-ca-cert-hash sha256:224a4ee5a62b4c4e283dc7c0165a68608cc70ba7ac759f6c932607aaf70093d7

 

再次查看node状态

[root@master ~]# kubectl get nodes

注:默认的token有效期为24小时,当过期之后,该token就不能用了,这时可以使用如下的命令创建token:

kubeadm token create --print-join-command
# 生成一个永不过期的token
kubeadm token create --ttl 0 --print-join-command

 

部署CNI网络插件

上面的状态还是 NotReady,下面我们需要网络插件,来进行联网访问

# 下载网络插件配置(若不成功,多试几次)

只在master上操作
[root@master ~]#wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 添加
[root@master ~]#kubectl apply -f kube-flannel.yml

# 等一会!

# ......

# 查看状态 【kube-system 是 k8s 中的最小单元】
[root@master ~]# kubectl get pods -n kube-system

等status均为running且ready都是1/1后

再次查看node状态
[root@master ~]]# kubectl get nodes
status状态为running

 

测试 kubernetes 集群

在 Kubernetes 集群中创建一个 pod,验证是否正常运行

下载 nginx 【会联网拉取 nginx 镜像】
[root@master ~]# kubectl create deployment nginx --image=nginx:1.14-alpine

# 查看状态
[root@master ~]# kubectl get pod
ContainerCreating是正在创建

如果出现 Running 状态的时候,表示已经成功运行了

下面就需要将端口暴露出去,让外界能够访问
[root@master ~]# kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort

# 查看一下对外的端口
[root@master ~]# kubectl get pod,svc

此时可通过节点ip:端口访问镜像,看到nginx界面即为测试成功
访问地址:http://节点IP:Port
http://192.168.1.51:31598/

 

参考

黑马B站k8s课程https://www.bilibili.com/video/BV1Qv41167ck/
https://gitee.com/yooome/golang/blob/main/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B-%E8%B0%83%E6%95%B4%E7%89%88/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B.md
https://www.yuque.com/fairy-era/yg511q/xyqxge

 

原文地址:http://www.cnblogs.com/gys001/p/16844918.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性