总体说明
- kubernetes处在不断的更新迭代中,因此其环境配置应注重时效性
- kubeadm是官方的辅助配置工具,简化了集群搭建过程
- 我搭建的是1.17.3的版本,2020年2月
- 搭建环境是centos7, 四核心16G内存三台机器
- 一个master节点,一个etcd,两台node,简单学习测试环境,很难用于实际生产
- 我用的ip 172.16.1.190 master .191 .192 node
安装前准备
机器要求
机器时间同步
各节点时间要求精确同步,可以直接联网的话,使用
systemctl start chronyd.service
systemctl enable chronyd.service
或者全部连接同一台时间服务器
节点的DNS解析(通过hosts文件进行)
为了方便区分先给没台机器设置主机名
hostnamectl set-hostname master/node01/node02....
在每台机器上向 /etc/hosts文件添加
cat <<EOF >>/etc/hosts
172.16.1.190 master
172.16.1.191 node01
172.16.1.192 node02
EOF
每台机器上关闭firewalld,禁用swap设备,关闭selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
sed -i 's /.* swap.*/#&/' /etc/fstab
查看swap是否被正确关闭
free -m
每台机器配置iptables
cat >/etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
EOF
sysctl --system
将yum源配置到国内
可以使用
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
为每台机器搭建docker
docker是k8s的基础组件,但要注意kubernets和docker对应的版本问题,一般两者默认都安装最新版本基本都兼容。关于k8s对docker的版本问题可以在其github项目的版本md文档中查阅到。
docker的安装参考菜鸟教程
测试docker,启动docker服务,并开机自启动,查看启动是否成功
docker --version
systemctl start docker
systemctl enable docker
systemctl status docker
docker默认从dockerhub拉取镜像,如果嫌慢,可以为其配置国内加速源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker- ce.repo
集群搭建
每台机器都安装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
配置过后安装
yum install -y kubelet kubeadm kubectl
安装过程中,可能由于Google和阿里的同步问题,导致gpgcheck不通过,可以使用:
yum install -y kubelet kubeadm kubectl --nogpgcheck
设置kubelet开机自启动
systemctl enable kubelet
注意这里不用启动kubelet,因为master还没有初始化,日志会提示缺少yaml文件,kubelet无法启动
Master节点的初始化
使用下命令查看几个重要命令
kubeadm -h
- kubeadm init (master节点初始化)
- kubeadm join (node节点加入集群)
- kubeadm reset (消除执行过后的init or join 的影响)
- –dry-run (可以加在命令后面,代表不修改任何文件,只看结果)
以kubedam安装的kubernetes,其核心组件,如apiserver,controller等也是以pod的形式在运行,所以,这一步骤中需要从google的站点k8s.grc.io拉取这些组件的镜像。而这个网站国内是不能正常访问的。国内能访问的源也有,如阿里云,dockerhub等。我们使用阿里云的源即可。
初始化命令如下:
kubeadm init --kubernetes-version=1.17.3 \
--apiserver-advertise-address=172.16.1.190 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.1.0.0/16
- apiserver地址即Master本机地址
- pod-network-cidr即pod网络对应的网段,因为kubernetes自身没有设计pod网络,所以需要其余的网络插件,常用的是flannel,这个地址是flannel默认的
执行上述命令,正确的话,应该类似这种输出
W1221 17:44:19.880281 2865 version.go:101] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt": Get https://dl.k8s.io/release/stable-1.txt: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
W1221 17:44:19.880405 2865 version.go:102] falling back to the local client version: v1.17.0
W1221 17:44:19.880539 2865 validation.go:28] Cannot validate kube-proxy config - no validator is available
W1221 17:44:19.880546 2865 validation.go:28] Cannot validate kubelet config - no validator is available
[init] Using Kubernetes ver