手把手带你搭建k8s集群

前言

本篇文章将使用Centos7系统并使用kubeadm来搭建k8s 1.19版本的单Master多Node节点的集群。安装参照以下步骤进行。

物理环境

三台虚拟机分别按照以下分配:

IP地址 主机名
192.168.5.200 k8s-master
192.168.5.201 k8s-node1
192.168.5.202 k8s-node2

系统初始化

对每台机器进行系统初始化,包括关闭swap,关闭防火墙,设置主机名等。

环境准备

为所有节点安装Docker。Docker是Kubernetes支持的容器运行时之一。

安装kubeadm、kubelet和kubectl

在所有节点上安装这些软件。kubeadm会帮助你引导集群并利用kubelet进行进一步的配置。kubectl则是一个很有用的命令行工具。

引导集群

在主节点上,你将使用kubeadm init 初始化主节点。

置网络插件

如果你不使用kubeadm init默认的网络插件,会需要你在kubeadm init运行完之后手动安装一个网络解决方案。

添加剩余节点

在其他每个节点上,运行kubeadm join来连接节点到集群。

从零开始

1、系统初始化

初始化中的操作需要在每台设备中需要进行操作。

设置主机名:

设置主机名(分别替换为对应的主机名)
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

同步三台主机的hosts文件:

cat <<EOF > /etc/hosts
192.168.5.200 k8s-master
192.168.5.201 k8s-node1
192.168.5.202 k8s-node2
EOF

需要关闭selinux:

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

还有交换空间也要同步关闭:

swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab

关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld

调整内核参数,允许转发:

modprobe br_netfilter
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
sysctl net.bridge.bridge-nf-call-iptables

2、环境准备

在此处我们将安装docker并且通过阿里云镜像站拉取需要的镜像。

安装docker(所有节点都需要安装):

卸载旧版本的docker
yum remove -y docker docker-common docker-selinux docker-engine
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
yum install -y docker-ce-19.03.11 docker-ce-cli-19.03.11 containerd.io

启动 Docker 服务
systemctl enable --now docker

添加 kubelet docker 服务用户组
groupadd docker
usermod -aG docker $USER

拉取需要用到的镜像,通过运行一下脚本将自动拉取镜像并重新标记镜像(在master节点运行此脚本):

#!/bin/bash

KUBE_VERSION=v1.19.0
PAUSE_VERSION=3.2
ETCD_VERSION=3.4.13-0
COREDNS_VERSION=1.7.0

images=(
kube-apiserver:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-proxy:${KUBE_VERSION}
pause:${PAUSE_VERSION}
etcd:3.4.9-1
coredns:${COREDNS_VERSION}
)

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

3、安装Kubeadm, Kubelet 和 Kubectl

在所有节点执行以下命令:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装 kubeadm, kubelet 和 kubectl:

yum install -y kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0

启动 kubelet:

systemctl enable --now kubelet

4、初始化 Kubernetes 主节点

在 k8s-master 节点执行以下命令:

用kubeadm初始化master节点
kubeadm init --kubernetes-version=v1.19.0 --pod-network-cidr=10.244.0.0/16

记下 kubeadm join 的命令,以便稍后在worker节点使用

为kubectl设置环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf

如果你是非root用户,运行以下命令将上述变量置入你的 .bashrc 文件
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> $HOME/.bashrc

5、配置网络插件

部署 Pod 网络 这里以 flannel 为例:

1、拉取镜像:

拉取 flannel 镜像
FLANNEL_VERSION=v0.13.0  # 作为示例,具体版本号可能有所不同
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/flannel:${FLANNEL_VERSION}-amd64

重新标记镜像
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/flannel:${FLANNEL_VERSION}-amd64 quay.io/coreos/flannel:${FLANNEL_VERSION}-amd64

验证镜像
docker images | grep flannel

2、配置flannel:

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

6、 添加 Node 节点

在k8s-node1和k8s-node2节点上优先拉取镜像:

#!/bin/bash

K8S_VERSION=v1.19.0
PAUSE_VERSION=3.2

images=(
kube-proxy:${K8S_VERSION}
pause:${PAUSE_VERSION}
)

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

在 k8s-node1 和 k8s-node2 节点上执行由 kubeadm init 生成的 join 命令。例如:

kubeadm join --token <token> <master-ip>:6443 --discovery-token-ca-cert-hash sha256:<hash>

安装完成后,不出意外的话很快就能看到如下的信息:

手把手带你搭建k8s集群
欢迎大家关注我的公众号,将会为大家推荐更优质的内容!

原文始发于微信公众号(青檬小栈):手把手带你搭建k8s集群

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/289742.html

(0)
葫芦侠五楼的头像葫芦侠五楼

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!