Kubernetes--环境搭建kubeadm

本文详细介绍如何使用kubeadm工具在CentOS环境下搭建Kubernetes集群,包括环境准备、Docker安装配置、DNS解析、网络配置、Kubernetes数据源配置、kubeadm/kubelet/kubectl安装、Kubernetes部署、flannel网络设置及node节点加入流程。
摘要由CSDN通过智能技术生成

一. 前言

官方提供了三种Kubernetes部署方式

1. minikube

Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。

2. kubeadm

Kubeadm是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群

3. 二进制包

从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

二. 环境要求

1.一台或多台机器,操作系统 CentOS7.x-86_x64
2. 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘20GB或更多
3. 集群中所有机器之间网络互通
4. 可以访问外网,需要拉取镜像
5. 禁止swap分区

三. kubeadm工具搭建

1. 设备准备

192.168.214.129    k8s-master (管理节点)
192.168.214.131    k8s-node  (工作节点)

2. 环境准备

1)关闭防火墙(所有节点)

$ systemctl stop firewalld
$ systemctl disable firewalld
$ iptables -F

2)关闭swap(所有节点)

$ swapoff -a $ 临时
$ vim /etc/fstab $ 永久
$ sed -i 's/.*swap.*/#&/' /etc/fstab

ps: Swap是操作系统在内存吃紧的情况申请的虚拟内存,按照Kubernetes官网的说法,Swap会对Kubernetes的性能造成影响,不推荐使用Swap。

3)主机名配置(所有节点)

在这里插入图片描述

3. 安装docker(所有节点)

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

##安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
##添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
##更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
sudo yum -y install epel-release
sudo yum -y install python-pip
sudo yum clean all
sudo pip install docker-compose
##开启Docker服务
sudo service docker start
##开机自启
systemctl enable docker

查看安装结果:docker info
在这里插入图片描述
ps:docker安装完后Cgroup Driver=cgroupfs和kubelet的Cgroup Driver=systemd不一致,需要修改docker的Cgroup Driver为systemd,修改如下:

sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://b81aace9.m.daocloud.io
vim /etc/docker/daemon.json
{
   "exec-opts": ["native.cgroupdriver=systemd"]
}

重启docker查看结果:

systemctl daemon-reload
systemctl restart docker
systemctl enable docker
docker info

在这里插入图片描述

4. 增加dns解析(所有节点)

echo nameserver 8.8.8.8 >> /etc/resolv.conf
systemctl restart network

5. 创建/etc/sysctl.d/k8s.conf文件(所有节点)

vi /etc/sysctl.d/k8s.conf

增加如下内容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

使配置生效:

modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

6. 配置国内数据源(所有节点)

yum install -y wget
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all && yum makecache

7. 配置国内Kubernetes数据源(所有节点)

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
setenforce 0

8. 安装kubeadm,kubelet和kubectl(所有节点)

1)安装kubeadm,kubelet和kubectl

yum install -y kubelet kubeadm kubectl

2)启动kubectl

systemctl enable kubelet && systemctl start kubelet

9. 部署Kubernetes(master节点)

 kubeadm init --kubernetes-version=v1.18.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.214.132 --ignore-preflight-errors=Swap

结果会报如下错误:
在这里插入图片描述
ps:由于是国外镜像,基本上无法下载对应的镜像包。仔细查看报错信息里面明确列出了安装需要用到的镜像名称和tag,那么我们只需要提前把这些镜像pull下来,再安装就ok了。

下载镜像:

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7

打成tag:

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.0    k8s.gcr.io/kube-apiserver:v1.18.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0    k8s.gcr.io/kube-controller-manager:v1.18.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.0    k8s.gcr.io/kube-scheduler:v1.18.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0    k8s.gcr.io/kube-proxy:v1.18.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2    k8s.gcr.io/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0    k8s.gcr.io/etcd:3.4.3-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7    k8s.gcr.io/coredns:1.6.7

再次执行:

kubeadm init --kubernetes-version=v1.18.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.214.132 --ignore-preflight-errors=Swap

结果如下(打印结果的最后一句kubeadm join在后面环节有用到):
在这里插入图片描述

10. 初始化k8s环境(master节点)

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

11. flannel网络设置(master节点)

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

执行结果:
在这里插入图片描述
查看节点状态(master节点)

kubectl get node

结果:状态为NotReady(不正常)
在这里插入图片描述
再查看所有pod(master节点)

kubectl get pods --all-namespaces

结果:有两个节点为pending状态(不正常)
在这里插入图片描述
再查看日志(master节点)

journalctl -f -u kubelet.service

结果:网络错误(不正常)
在这里插入图片描述
回头想下刚才执行的kubectl apply -f kube-flannel.yml,其实是在下载flannel镜像。
因此查看下有没有flannel镜像

docker images|grep flannel

在这里插入图片描述
说明:镜像还在下载中,因此此处需要等待大概4到5分钟,之后再查看,发现主节点正常

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

12. node节点添加到master节点(node节点)

下载镜像:

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7

打成tag:

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0    k8s.gcr.io/kube-proxy:v1.18.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2    k8s.gcr.io/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0    k8s.gcr.io/etcd:3.4.3-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7    k8s.gcr.io/coredns:1.6.7

执行第9步生成的添加语句:

kubeadm join 192.168.214.132:6443 --token 5cy1j4.y5kb1jgsn3rluejb \
    --discovery-token-ca-cert-hash sha256:b7fc5e9a72ba34b00494600280c593a8828efb8be8d4dade6cbeba988c270bb2

结果:
在这里插入图片描述
在master上查看节点状态, 为NotReady
在这里插入图片描述
大概需要等待半分钟,再次查看
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

victor-维克特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值