之前根据别人的文章创建了k8s虚拟机,鉴于我已经深爱直接下载虚拟机,按捺不住又想把完成品的虚拟机分享出来以供下载(虽然其实价值并不大😓)。但CentOS标准版制成的虚拟机文件较大,因此我又重制了一份minimal版本的,并更新到了最新的docker&k8s版本,也一并记录在此。
一. 版本
CentOS-7.9-2207-minimal.7z:CentOS停止维护了,7.9在2022年更新的版本算是个不错的选择
docker-ce-20.10.24-3.el7: 2024年更新的20.10版本,算是比较新的稳定版
kubeadm-1.28.10 kubelet-1.28.10 kubectl-1.28.10:2024年维护中的k8s版本
二. 装系统
先在阿里云下载CentOS: https://mirrors.aliyun.com/centos-vault/7.9.2009/isos/x86_64/
然后用 VMWare Player 17 (个人版)安装这个 minimal 版本:
结束安装并重启虚拟机后,配置网络如下:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
hostnamectl set-hostname master
vi /etc/hosts
reboot后,下面的工作就可以ssh到虚拟机上操作了。
三. 配置系统
先安装一下 net-tools 和 wget:
yum install net-tools
yum install wget
再配置一下习惯用法,比如 vim alias,上下键补全等:
vi ~/.bashrc
vi ~/.inputrc
.inputrc文件内容:
"\e[A": history-search-backward
"\e[B": history-search-forward
接下来是适配k8s的一些services:
yum install ntp
systemctl restart ntpd
systemctl enable ntpd
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
关闭swap:
swapoff -a
vi /etc/fstab
k8s网桥配置:
vi /etc/sysctl.d/kubernetes.conf
sysctl -p
modprobe br_netfilter
lsmod | grep br_netfilter
kubernetes.conf文件内容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
安装ipvs
yum install ipset ipvsadm
vi /etc/sysconfig/modules/ipvs.modules
chmod +x /etc/sysconfig/modules/ipvs.modules
/bin/bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
ipvs.modules文件内容
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
四. 安装docker
docker选用10.20.24的最新版本
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install --setopt=obsoletes=0 docker-ce-20.10.24-3.el7
mkdir /etc/docker
vi /etc/docker/daemon.json
systemctl enable docker && systemctl start docker
daemon.json文件内容
{
"registry-mirrors": ["https://【自己申请】.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
五. 安装k8s
k8s选用了现在仍在维护的、更新了好几个小版本的1.28.10
vi /etc/yum.repos.d/kubernetes.repo
yum install --setopt=obsoletes=0 kubeadm-1.28.10 kubelet-1.28.10 kubectl-1.28.10
vi /etc/sysconfig/kubelet
kubernetes.repo文件内容
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/r...
注意:阿里云从k8s 1.28版本开始,切换了repo到kubernetes-new
sysconfig/kubelet文件内容
KUBELET_EXTRA_ARGS=
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
六. 创建k8s
kubeadm init \
--apiserver-advertise-address=【本机IP】 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.28.10 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
kubeadm init 时出现了几次问题,大多与国内网络环境有关,具体解决方法看图:
6.1 container runtime is not running / unknown service runtime.v1.RuntimeService
rm /etc/containerd/config.toml
systemctl restart containerd.service
6.2 failed to pull and unpack image "registry.k8s.io/pause:3.6"
containerd config default > /etc/containerd/config.toml
vi /etc/containerd/config.toml
docker pull registry.aliyuncs.com/google_containers/pause:3.9
systemctl daemon-reload
systemctl restart containerd.service
其中config.toml文件中的sandbox_image替换路径为:
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
注:使用 pause:3.9 是 kubeadm init 时的提示
6.3 拉取image失败,手动拉取如下:
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.10
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.10 registry.k8s.io/kube-apiserver:v1.28.10
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.10
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.10 registry.k8s.io/kube-controller-manager:v1.28.10
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.10
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.10 registry.k8s.io/kube-scheduler:v1.28.10
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.28.10
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.28.10 registry.k8s.io/kube-proxy:v1.28.10
docker pull registry.aliyuncs.com/google_containers/etcd:3.5.12-0
docker tag registry.aliyuncs.com/google_containers/etcd:3.5.12-0 registry.k8s.io/etcd:3.5.12-0
docker pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
docker tag registry.aliyuncs.com/google_containers/coredns:v1.10.1 registry.k8s.io/coredns/coredns:v1.10.1
docker pull registry.aliyuncs.com/google_containers/pause:3.9
七. 安装flannel
由于网络原因,flanneld的image最好手动获取。github上获取flanneld镜像位置为:https://github.com/flannel-io/flannel/releases/tag/v0.25.4,这里我取了现在的最新版本:
下载 docker 与 yaml 配置文件,从 yaml 中,可以看到相匹配的 cni-flannel 插件版本:
然后还是在 github 上,找到对应版本的 cni-flannel 插件:https://github.com/flannel-io/cni-plugin/releases/tag/v1.4.1-flannel1
7.1 加载flanneld镜像
将下载的flanneld加载入docker image:
docker load < flanneld-v0.25.4-amd64.docker
docker save -o flannel-v0.25.4-amd64.tar quay.io/coreos/flannel
ctr -n k8s.io images import flannel-v0.25.4-amd64.tar
vi kube-flannel.yml
- 由于最新的k8s采用了containerd,因此加载到docker image还不够,还需要加载到containerd的k8s.io域
- kube-flannel.yml 里面的flanneld取自docker.io,从github上下载的来自guay.io,因此需要修改kube-flannel.yml使其匹配
7.2 配置cni-flannel插件
根据kube-flannel.yml的配置,cni-flannel插件需要从 docker.io/flannel/flannel-cni-plugin:v1.4.1-flannel1 下载,然而从 github 上下载的 cni-plugin-flannel-linux-amd64-v1.4.1-flannel1.tgz 并不是 docker image,而是个可执行文件。
有三种做法:
- 修改docker.io,使用一个可访问的镜像源
- 下载cni-flannel插件的docker image,并同7.1 flanneld一样操作
直接使用可执行文件版本,不使用容器版本
这里采用最后一个方法:tar xvf cni-plugin-flannel-linux-amd64-v1.4.1-flannel1.tgz cp flannel-amd64 /opt/cni/bin/flannel vi kube-flannel.yml
将kube-flannel.yml配置文件中,flannel-cni-plugin的部分删除:
八. 使用kubectl
按照 kubeadm init 成功后的提示信息,配置如下:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
kubectl apply -f kube-flannel.yml
之后就可以通过kubectl命令查看k8s状态了:
kubectl get nodes
kubectl get pods -A
九. 组网
将上面的虚拟机复制两份,分别运行后:
- 修改新虚拟机的 hostname 为 node1 与 node2
- 分别在三台机器修改/etc/hosts,设置 master/node1/node2 对应的 IP
- 在 master 执行 kubeadm init 命令
- 在 node1 与 node2 执行 kubeadm join 命令【见 kubeadm init 的输出打印】
- 在 master 执行 kubectl apply -f kube-flannel.yml
十. 虚拟机下载
最后,上面所有的成果可以在这里直接下载【虚拟机】:
https://pan.baidu.com/s/1qojhU6QMeOm0abkhoBwikg?pwd=pg99
linux用户名:root
linux密码:123456
使用方法:
- 虚拟机启动时选择“已‘复制’虚拟机”
- 配置 /etc/docker/daemon.json 中的镜像地址
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。