前言
首先,准备2台虚拟机,centos或者unbuntu即可
其次,做好各种心理准备,你可能会遇到各种各样让你崩溃但是又不知如何解决的问题,听我的,耐心点,一点点排查问题,很多答案现在网上并没有解决方案只能自己去摸索,原因就是因为国内现在对docker封杀了,你可能会下载不了一些镜像。
最后,还是得去详细了解一下docker得使用和kubernetes得原理会比较好,如果你是运维得话,但是我这里搭建环境的主要原因还是想要研究一下云原生安全攻防的知识。
前期准备
IP配置:
master: 192.168.65.204
k8s-node: 192.168.65.203
以下操作master和node节点都需要进行
ip根据现实具体情况来即可
主机重命名
hostnamectl set-hostname <hostname>
配置/etc/hosts ,如下所示:
192.168.65.204 master
192.168.65.203 k8s-node2
关闭Selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久关闭
setenforce 0 # 临时关闭
关闭Swap:
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
确保网络桥接的数据包经过Iptables处理,启用相关的内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker
配置镜像下载加速器和设置Cgroup驱动
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload
systemctl restart docker
安装cri-dockerd(Docker与Kubernetes通信的中间程序)
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpm
rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm
指定依赖镜像地址为国内镜像地址
vi /usr/lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker
添加阿里云YUM软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0
systemctl enable kubelet
初始化Master节点(apiserver-advertise-address的值根据实际来,填写master机器的IP)
kubeadm init \
--apiserver-advertise-address=192.168.65.204 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock
初始化完成后,根据提示信息,拷贝kubectl工具认证文件到默认路径,这里有个点要注意,有些时候似乎也需要把master节点生成的admin.conf文件移动到node节点,但是又好像会出现安全问题,真实情况是我配置了。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
自此,前期的配置基本已经完成。
节点加入与组件安装
如果以上的配置都正确且没有出现问题,正常情况下,docker和cri-docker服务应该都已经启动。
将Node节点加入集群
执行上述输出的“kubeadm join”命令,将本节点加入到Kubernetes集群中,此命令在node节点中使用
kubeadm join 192.168.65.204:6443 --token 7gqt13.kncw9hg5085iwclx \
--discovery-token-ca-cert-hash sha256:66fbfcf18649a5841474c2dc4b9ff90c02fc05de0798ed690e1754437be35a01 --cri-socket=unix:///var/run/cri-dockerd.sock
之后就是安装网络组件了,这点是最坑也是困扰了我最多的问题,后面仔细研究了一下组件安装报错的原因才找到了解决的方案,这个建议只是提供一个参考也不确定能不能完全解决其他人的问题。
很多人可能会存在calico组件安装失败的问题,尤其是在国内,这很可能是因为相关的镜像没有被拉取,我的解决方案是手动拉取那些拉取失败的镜像,然后再重启机器,这一点在master和node节点都会出现,都需要操作。
这里使用Calico作为Kubernetes的网络插件,负责集群中网络通信。
创建Calico网络组件的资源
kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml
等待calico组件安装完成即可,当你使用kubectl get nodes命令 发现所有节点都是Ready状态即可说明,kubernetes集群已经安装完成。
如果读者在安装过程中有任何问题,欢迎在文章下进行留言,我会及时进行解答和交流,如果文章写的有不对的地方也欢迎指正。