其实想折腾kubernetes很久了,但是由于早期官网写的基础性能要求很高,一直没有这么一台满足性能要求的机器,也就没提上日程。后来机器升级了些,但也不是很高,加上kubernetes概念多,系统复杂,可能也是我自己能力还不足,驾驭不了这么一个系统,所以一直没有提上日程。这几天成都疫情被封印在家,下了决心,把这个栈折腾一下。因为这块板子短,很多方面已经露出弊端了。
手上有个AMD的台式机,被我加过内存,勉强拿来用吧,基本环境如下:
在官网教程,任务-安装工具 记忆而中,似乎是推荐用kubectl进行安装的,我估计这个安装过程可以让我更了解搭建的过程。但是,在入门-生产环境中,却没有这个选项,取而代之的是kubiadm。由于本次搭建就是面向生产的,所以我们就直接怼kubiadm了。如果后续还有什么需要,我们在返回来补一个kubectl的搭建过程。
在硬件配置上,我规划的是一个控制面板节点,三个数据节点。
准备了四台虚拟机,配置均为centos7,4核8G,分别是
初始化配置采用了我以往记录的一片centos7的初始化操作:centos7基础操作
如果机器之间默认网络路由不通的话,需要先搞通,比如添加路由啥的,我这里网络环境很简单,就没有这个步骤了
不过由于我直接把防火墙关了,所以这一步其实也是不需要的,不过还是把需要的端口记录下来。下面是官网连接,所需端口的内容就源自于该链接
端口和协议
临时
journalctl -xeu kubelet
永久
注释/etc/fstab关于swap那行的配置,然后执行下面的指令
echo vm.swappiness=0 >> /etc/sysctl.conf
reboot
将这个参数设置为0后,交换分区就被关掉了,在内存不足时,擦偶偶系统将会杀进程。为了避免这件事,有的也会推荐配置为一个很低的值,1。不够kubbernetes官网没有推荐这个事,我还是改为了0。
| 协议 | 方向 | 端口范围 | 目的 | 使用者 |
|---|---|---|---|---|
| TCP | 入站 | 6443 | Kubernetes API server | 所有 |
| TCP | 入站 | 2379-2380 | etcd server client API | kube-apiserver, etcd |
| TCP | 入站 | 10250 | Kubelet API | 自身, 控制面 |
| TCP | 入站 | 10259 | kube-scheduler | 自身 |
| TCP | 入站 | 10257 | kube-controller-manager | 自身 |
| 尽管 etcd 的端口也列举在控制面的部分,但你也可以在外部自己托管 etcd 集群或者自定义端口。 |
| 协议 | 方向 | 端口范围 | 目的 | 使用者 |
|---|---|---|---|---|
| TCP | 入站 | 10250 | Kubelet API | 自身, 控制面 |
| TCP | 入站 | 30000-32767 | NodePort Services | 所有 |
我这里还是实用docker作为容器运行时。但是,由于Docker Engine没有实现CRI,所以如果要用还必须安装cir-dockerd服务才可以。CRI是Container Runtime Interface的所限,中文为容器运行时接口,kubernetes默认实用该接口与容器交互。所以,每台机器上都需要安装Docker Engine和cri-dockerd
官方链接
移除旧版本Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装仓库
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
操作docker服务
sudo systemctl status/start/stop/enable docker
官方链接
这是一个github的项目,项目上说的也很简略,反正最后给了个有DockerEngine的安装脚本,照着跑就行了。
然而,这个脚本的执行过程要翻墙。虽然我可以翻墙,但是我不想以后总是解决服务器这个问题,所以,我找到了另一个办法,安装打包好的包。官方下载链接
最新版本到了0.2.5,我就下这个吧,存一个,防止以后找不到。
yum install cri-dockerd-0.2.5-3.el7.x86_64.rpm -y
修改启动文件
sed -i 's,^ExecStart.*,& --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7,' /usr/lib/systemd/system/cri-docker.service
启动cri-dockerd
systemctl daemon-reload
systemctl enable --now cri-docker.service
systemctl enable --now cri-docker.socket
有个注意事项,这个cri-docker不仅安装依赖docker,启动也依赖docker,所以启动之前要县启动docker的服务。所以,两个都弄成开机启动吧
这三个东西每天机器上都要装:
cat <原文上有段设置selinux的代码。由于我之前设置过了,这里就移除了。
虽然要翻墙,但还是记在这吧,下面我们看看不翻墙怎么弄。
后来是在受不了了,找了下有个阿里的仓库,如下:
cat < /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
EOF
听说版本有一点点滞后,以及check一定不要打开。
配置好后就很简单了
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
执行以上指令就安装完成了
现在kubelet是无法启动成功的,他在等待kubeadm的指令