K8s环境搭建

1.配置虚拟机

1)这里使用3台 操作系统为centos7的虚拟机。配置为2核,2G内存,40G硬盘。

  • master : 192.168.229.100
  • node1:192.168.229.101
  • node2:192.168.229.102

2)!!!!!一定要注意,centos7的内核版本要大于4,本文使用的是6.6.4-1.el7.elrepo.x86_64。如果内核小于4建议升级内核,其方法网上都有参考,升级至最新就可以了。

# 查看自己虚拟机的内核
uname -r

2.配置虚拟机基础设置

​ 在配置虚拟机时,很多配置3台虚拟机都需要进行配置,为了方便可以使用MobaXterm软件,可以进行3台虚拟机的同屏操作,方便设置,如下图所示。具体的下载和使用方法,网上都有说明。

在这里插入图片描述

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久

# 关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

# 关闭完swap后,一定要重启一下虚拟机!!!
# 根据规划设置主机名(这个主机名一般在配置虚拟机的时候就设置了)若没设置则安装以下格式进行设置
# 这里设置的主机名为master,node1,node2
hostnamectl set-hostname <hostname>
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
# 在master添加hosts(这里将ip地址换成自己虚拟机的地址,主机名也和设置的虚拟机主机名对应)
cat >> /etc/hosts << EOF
192.168.229.100 master
192.168.229.101 node1
192.168.229.102 node2
EOF

# 将桥接的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  # 生效


# 时间同步
yum install ntpdate -y
ntpdate time.windows.com

3.使用软件的安装

这里要注意使用dockerkubelet的版本一定要对应,否则在启动kubelet时,会报让你降级docker的错误。

1)使用版本为20.10.6-3docker。(以下安装步骤为第一次在虚拟机上安装docker)。

# Step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step3: 安装20.10.6-3版本的docker
yum install docker-ce-20.10.6-3.el7 docker-ce-cli-20.10.6-3.el7 containerd.io
# Step 4: 开启Docker服务
sudo service docker start
# Step 5: 设置docker开机自启 
systemctl enable docker

2)添加阿里云镜像,不然在安装kublet时找不到包。

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

2)使用版本为1.23.6kubeletkubeadmkubectl

# Step 1: 安装kubelet,kubeadm,kubectl
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6 
# 设置kubelet的开机自启
systemctl enable kubelet
# Step 2: 在后续启动kubelet时可能会出现无法加载cgroups文件的错误,所以需要关闭docker的cgroups文件。
vim /etc/docker/daemon.json
# Step 3: 如果在打开daemon.json文件后里面有文件则直接加入大括号中间的内容,如果为空则将下面配置整体复制。
{"exec-opts": ["native.cgroupdriver=systemd"]}
# Step 4: 重启 docker
systemctl daemon-reload
systemctl restart docker 

4.部署master节点

# 在 Master 节点下执行

kubeadm init \
      --apiserver-advertise-address=192.168.229.100 \
      --image-repository registry.aliyuncs.com/google_containers \
      --kubernetes-version v1.23.6 \
      --service-cidr=10.96.0.0/12 \
      --pod-network-cidr=10.244.0.0/16

初始化master成功,如下图所示。

在这里插入图片描述

# 安装成功后,复制如下配置并执行
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
# 查看是否安装成功(会出现master节点的信息)
kubectl get nodes

5.加入node节点

如果在初始化master后没有清屏,则直接复制下图所示的命令到node1node2中即可。

命令即位kubeadm join ......

在这里插入图片描述

1)获取token

# 如果 token 已经过期,就重新申请
kubeadm token create
# token 没有过期可以通过如下命令获取
kubeadm token list

2)获取hash

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'

3)进行拼接(这里join 后跟自己主节点的ip

kubeadm join 192.168.229.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

6.部署CNI网络插件

!!!!!注意一定要查看centos7的内核是否大于4不然,以下执行过程中会出错。

# 查看centos7系统内核版本
uname -r

1)先进入opt目录,然后创建k8s文件夹,存放CNI配置。

cd /opt
mkdir k8s
cd k8s
  1. 下载calico.yaml文件。
wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml

3)编辑calico.yaml文件,将其中的CALICO_IPV4POOL_CIDR字段设置为部署master节点时设置的 --pod-network-cidr

# 编辑文件
vim calico.yaml
# 找到CALICO_IPV4POOL_CIDR字段
# 将其下面的value设置为10.244.0.0/16 (本文为10.244.0.0/16)

在这里插入图片描述

4)删除掉colico.yaml文件中的前缀docker.io,因为该文件默认是从docker官网上拉去文件,会很慢。

sed -i 's#docker.io/##g' calico.yaml

5)应用colico.yaml文件。

kubectl apply -f calico.yaml

6)以下命令可以查看节点和pod的状态。

//查看pod的状态
kubectl get po -n kube-system
//查看节点的状态
//kubectl get no

出现下图的样式,就说明网络已经配置成功了。
在这里插入图片描述
在这里插入图片描述

7.测试kubernetes集群

1)创建部署一个nginx

# 创建部署
kubectl create deployment nginx --image=nginx

2)对外暴露端口号。

# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort

3)查看端口信息,可以看见如下端口信息。

kubectl get pod,svc

在这里插入图片描述
4) 访问nginx,如下图所示。

curl 192.168.229.100:32674

在这里插入图片描述

8.总结

1)至此k8s环境的部署就结束了,在部署过程中也遇到了不少的坑,主要的问题总结如下。

  • 安装的dockerkubelet的版本一定要对应起来,如果直接拉取最新版本的docker,在初始化master节点时,会出现让降低docker版本的提示。
  • 本文安装的是centos7,其内核一定要大于4,否则在进行部署CNI网络插件时,会出现找不到/sys/fs/bpf的错误,导致pod无法进行runing状态,或着calico-node一直处于init0/3的状态。
  • 上文中未指明要在master节点中的设置,则说明3台虚拟机都需要进行设置。
Logo

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

更多推荐