上篇在硬件上已经做好准备:【k8s】环境准备:vmware中安装centos7 这篇进行软件准备,这里说下我个人的学习思路,我一贯先把环境准备好,而不是先去学习理论,我认为边实践边补充理论知识是最好的学习方法。新手上路,每一步都是艰难险阻,一点点击败它,就会成长。

注意:k8s1.24版本不支持docker容器,此安装步骤不适合1.24以上版本(如果想继续使用docker的话,可以在kubelet和docker之间加上一个中间层cri-docker)

安装条件

前面三步实际上我们已经在上篇文章操作完成了

  1. 多台Linux机器 CentOS7
  2. 2G以上RAM,2个以上CPU
  3. 集群网络互通,可访问外网
  4. 关闭防火墙,关闭swap分区

已经安装了三台服务器:

主机名ip
k8s-master192.168.131.110
k8s-node1192.168.131.111
k8s-node2192.168.131.112

以下命令在所有主机上都执行

可以使用xshell的工具->发送键输入到->所有会话,来同时操作所有主机

添加hosts

vi /etc/hosts
# 追加如下内容
192.168.131.110 k8s-master
192.168.131.111 k8s-node1
192.168.131.112 k8s-node2

结果如图:
在这里插入图片描述

关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

关闭selinux

  • 临时关闭
setenforce 0
  • 永久关闭(我选择此方式)
vi /etc/sysconfig/selinux
# 修改 SELINUX=disabled

结果如图:
在这里插入图片描述

关闭swap

  • 临时关闭
swapoff -a
  • 永久关闭(我选择此方式)
vi /etc/fstab
# 注释掉这行: /dev/mapper/centos-swap swap    swap    defaults        0 0

结果如图:
在这里插入图片描述

重启

  • 上面两个永久关闭,要重启后生效
sudo reboot

允许 iptables 检查桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

安装Docker

# 安装下载工具 wget
yum install wget -y
# 修改下载源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 安装docker
yum -y install docker-ce
# 开机自启&重启docker
systemctl enable docker && systemctl start docker

配置Docker

cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"] #这里要改一下,并去掉注释
}
EOF

这里的 registry-mirrors,可以去阿里云控制台生成一个,阿里云镜像加速地址
在这里插入图片描述

  • 重启docker
systemctl restart docker

安装kubeadm,kubelet和kubectl

  • 添加阿里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
  • 执行安装
sudo yum install -y kubelet-1.23.5 kubeadm-1.23.5 kubectl-1.23.5 --disableexcludes=kubernetes
# 开机自启 kubelet
sudo systemctl enable --now kubelet

以下命令在master主机上运行

初始化master

kubeadm init \
--apiserver-advertise-address=192.168.131.110 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.5 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
# 这里只需改一下apiserver-advertise-addres为你的master ip地址
  • 此处如果报错,要排错,然后执行 kubeadm reset,然后重新初始化。。。
  • 执行正常,会出现如下结果:

在这里插入图片描述

  • 执行图中操作:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 查看集群节点
kubectl get nodes

以下命令在node上执行

加入node

  • master中执行kubeadm init之后的join命令
# 在node节点中执行
kubeadm join 192.168.131.110:6443 --token bwq141.9oljvnuvegh4p6kq \
	--discovery-token-ca-cert-hash sha256:51c30bb24efea08ac014da0ec8f7ab52f28680276056960466f0cc348a351dad

以下命令在master上执行

如果上面步骤成功了,====内无需执行,有需要再执行即可。

============================================

  • 重新生成新的join命令(有效期为24小时)
kubeadm token create --print-join-command
  • 查看存在的token
kubeadm token list
  • 生成永久token
kubeadm token create --ttl 0
  • 生成 Master 节点的 ca 证书 sha256 编码 hash 值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed  's/^.* //'

============================================

此时执行kubectl get nodes 会发现所有节点都是NotReady状态,要安装容器网络。
在这里插入图片描述

  • master安装容器网络(此处看到有用其他yaml文件的,如kube-fannel.yml,我测试没能成功,这里选择的这个可以成功)
# 下载yaml文件
wget http://static.corecore.cn/weave.v2.8.1.yaml
# 应用
kubectl apply -f weave.v2.8.1.yaml
# 此处这个yaml文件看不懂内容,后续学习再慢慢深入理解

等待镜像拉取和初始化操作约1分钟后,执行

kubectl get pods -n kube-system -o wide

会看到全部的pod都已经是运行状态了

在这里插入图片描述

再执行

kubectl get nodes -o wide

会看到全部node节点都变成了Ready状态了
在这里插入图片描述
至此,k8s集群就模拟安装完成了。

测试集群

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

在这里插入图片描述

这里可以看到nginx的映射端口是32387,用集群中任意一个ip:32387,即可成功访问到nginx

在这里插入图片描述
软件环境正式安装完成,接下来就可以愉快地玩耍k8s了。

前方深渊,身后地狱。到达胜利之前,无法回头!!!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐