基于easystack在centos7.6中搭建1.19.2版本kubernetes
准备工作
本文使用的系统是centos7,需要两核CPU以上,内存2G以上,硬盘20G以上,在物理机虚拟机安装皆可。
1. 查看系统版本
$ cat /etc/centos-release
CentOS Linux release 7.6.2009 (Core)
2. 配置主机名(根据自己的情况修改主机名称,本例为master_02)
$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.111.22 master_02
3. 修改 /etc/hostname 文件,添加主机名和 IP 的对应关系:(有node,将node也加入即可)
$ hostnamectl set-hostname master
4. 关闭swap,注释swap分区
如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为false 来忽略 swap on),故需要在每台机器上关闭 swap 分区。
PS.
(1) 为了防止开机自动挂载 swap 分区,可以注释 /etc/fstab 中相应的条目
(2) 根据需求清空防火墙规则,本文中没有关闭防火墙
如有需要请参考blog
$ swapoff -a
5. 添加阿里源
$ rm -rfv /etc/yum.repos.d/*
$ curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
6. 配置内核参数,将桥接的IPv4流量传递到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
安装常用包
PS. 可以先移除电脑上原有的dockers,可参考官方文档。
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1. 安装必要的一些系统工具
$ yum install vim bash-completion net-tools gcc -y
使用aliyun源安装docker-ce
1. 安装docker
$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo %添加软件源信息
$ yum -y install docker-ce-18.06.3.ce-3.el7 %下载最新版本的docker即可
2. 添加aliyundocker仓库加速器
$ mkdir -p /etc/docker
$ tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://fl791z1h.mirror.aliyuncs.com"]
}
EOF
$ systemctl daemon-reload
$ systemctl restart docker
升级内核版本
PS. 具体步骤可参考文章《Centos7 升级内核版本》
1. 查看当前内核版本
$ uname -r
$ uname -a
$ cat /etc/redhat-release
2. 更新yum源仓库
$ yum -y update
3. 启用 ELRepo 仓库
- 导入ELRepo仓库的公共密钥
$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
- 安装ELRepo仓库的yum源
$ rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
4. 查看可用的系统内核包
$ yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
5. 安装最新版本内核
$ yum --enablerepo=elrepo-kernel install kernel-ml
6. 设置 grub2
PS. 内核安装好后,需要设置为默认启动选项并重启后才会生效
- 查看系统上的所有可用内核
$ sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
- 设置新的内核为grub2的默认版本
服务器上存在4 个内核,我们要使用 5.12.2-1 这个版本,可以通过 grub2-set-default 0 命令或编辑 /etc/default/grub 文件来设置。
$ grub2-set-default 0 %其中 0 是上面查询出来的可用内核
PS. 编辑 /etc/default/grub 文件来设置内核的方法可参考Centos7 升级内核版本
7. 验证
$ uname -r
PS. 如想删除旧内核可参考Centos7 升级内核版本
安装kubectl、kubelet、kubeadm
1. 添加阿里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
2. 安装指定版本的kubectl、kubelet、kubeadm(本例安装的都是1.19.2版本)
$ yum install kubectl-1.19.2 kubelet-1.19.2 kubeadm-1.19.2
$ systemctl enable kubelet
初始化k8s集群
PS.本例使用编写kubeadm.yaml方法初始化集群
!! 如果已经使用其他方法但是没有成功初始化集群,可先执行 kubeadm reset 命令,再进行接下来的操作。
$ kubeadm config print init-defaults > kubeadm.yaml
$ vim kubeadm.yaml
将上图中的 ① 部分改为自己主机的ip地址;将 ② 部分改为 registry.cn-hangzhou.aliyuncs.com/google_containers
$ kubeadm init --config=kubeadm.yaml
记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。
- 根据提示创建kubectl
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
安装calico网络
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
node节点加入集群
1. 加入集群
在 kubeadm 初始话集群成功后会返回 join 命令,里面有 token,discovery-token-ca-cert-hash等参数,需要记下来。有关 token 的过期时间是24小时, certificate-key 过期时间是2小时。
PS. 其他情况请参考节点加入k8s集群如何获取token等参数值
- token没过期
$ kubeadm token list #在master节点执行获取token
- token已过期,需重新生成
$ kubeadm token create --print-join-command #在master节点执行
根据提示将node节点加入集群
$ kubeadm join 192.168.111.22:6443 --token abcdef.0123456789abcdef --discovery-....
2. 安装calico网络
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
3. 将master节点的admin.conf发送到到所有node节点
$ scp /etc/kubernetes/admin.conf 节点ip:/etc/kubernetes/admin.conf
4. 为节点设置role值
$ kubectl label node node-02.nocvalocal(节点名称) kubernetes.io/role=node-02
kubeadm join 192.168.111.37:6443 --token jwp0jx.53ci7q1elgp0ua3w --discovery-token-ca-cert-hash sha256:992d7a97715e8e2230ede29b20e7d9e12e362ce720771ac9f8c99be6565abcca