一、环境规划
1、集群类型
kubernetes集群大体上分为两类:一主多从和多主多从。
- 一主多从:一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境
- 多主多从:多台Master节点和多台Node节点,搭建麻烦,安全性高,适合用于生产环境
2、安装方式
kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包
- minikube:一个用于快速搭建单节点kubernetes的工具
- kubeadm:kubernetes.io 官方推荐的工具,便于快速安装 kubernetes 集群
- 二进制包 :从官网下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效
说明:本文档采用kubernetes.io 官方推荐的工具(kubeadm)便捷安装k8s集群
3、主机规划
| 主机名 | IP地址 | 操作系统 | 配置 |
|---|---|---|---|
| Master | 192.168.0.100 | CentOS 7.9 | 2核CPU 2G内存 50G硬盘 |
| Node1 | 192.168.0.101 | CentOS 7.9 | 2核CPU 2G内存 50G硬盘 |
| Node2 | 192.168.0.102 | CentOS 7.9 | 2核CPU 2G内存 50G硬盘 |
4、软件版本
Docker version:19.03.8
Kubernetes version :1.21.2
- k8s.gcr.io/kube-apiserver:v1.21.2k8s.gcr.io/kube-controller-manager:v1.21.2
- k8s.gcr.io/kube-scheduler:v1.21.2
- k8s.gcr.io/kube-proxy:v1.21.2
- k8s.gcr.io/pause:3.4.1
- k8s.gcr.io/etcd:3.4.13-0
- k8s.gcr.io/coredns/coredns:v1.8.0
- flannel: v0.14.0
二、环境初始化
下面的操作需要在_**所有节点**_上执行1、主机名解析
编辑三台服务器的/etc/hosts文件,添加下面内容192.168.0.100 master192.168.0.101 node1192.168.0.102 node2
2、时间同步
ntpdate ntp.aliyun.com echo "10 1 * * * root ntpdate ntp.aliyun.com" >> /etc/crontab3、禁用swap分区
swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab4、允许 iptables 检查桥接流量
``` cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl —system
<a name="dVSTA"></a>
## 5、安装docker
```bash
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.8 docker-ce-cli-19.03.8 containerd.io
systemctl start docker
安装docker参考菜鸟教程:
Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfsvim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
重启docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
6、安装k8s组件
安装kubelet kubeadm kubectl,先配置国内源,再进行安装。
# 由于kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源
# 编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=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
# 安装kubeadm、kubelet和kubectl,不指定版本,默认为当前最新版v1.21.2
yum install -y kubelet kubeadm kubectl
# 指定版本安装如下
# yum install --setopt=obsoletes=0 kubeadm-1.21.2-0 kubelet-1.21.2-0 kubectl-1.21.2-0 -y
# 配置kubelet的cgroup
# 编辑/etc/sysconfig/kubelet,添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
systemctl enable --now kubelet
# kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。
7、拉取集群所需镜像
# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
kubeadm config images list
# 下载镜像
# 此镜像在kubernetes的仓库中,由于网络原因,无法连接,可以先从阿里仓库进行pull,再tag打标签。
images=(
kube-apiserver:v1.21.2
kube-controller-manager:v1.21.2
kube-scheduler:v1.21.2
kube-proxy:v1.21.2
pause:3.4.1
etcd:3.4.13-0
coredns/coredns:v1.8.0
)
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
# coredns/coredns:v1.8.0 镜像应该拉取不到,因为在阿里仓库 其名称为coredns:1.8.0,可以先手动拉取再打标签修改名称
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.0
三、集群初始化
下面的操作只需要在_**master节点**_上执行
# 创建集群
[root@master ~]# kubeadm init \
--kubernetes-version=v1.21.2 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.0.100
# 创建必要文件
[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
下面的操作只需要在_**node节点**_上执行
kubeadm join 192.168.0.100:6443\
--token bh8xta.9r5vcoxg80t0uhcz\
--discovery-token-ca-cert-hash\ sha256:f6dbd36cc71f97c86c0cfa836d5808469b5a222643694132842f76619d0e060a
四、安装网络插件
kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可,本次选择flannel
下面操作依旧只在master节点执行即可**,插件使用的是DaemonSet的控制器,它会在每个节点上都运行**
wget https://kuboard.cn/install-script/flannel/flannel-v0.14.0.yaml
kubectl apply -f flannel-v0.14.0.yaml
稍等片刻,再次查看集群节点的状态
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 7m16s v1.21.2
node1 Ready <none> 3m23s v1.21.2
node2 Ready <none> 3m21s v1.21.2
至此,kubernetes的集群环境搭建完成
说明:本文档搭建的是 一主两从 类型的集群
