1.安装环境

  操作系统:Centos7

  Docker: 20+

  K8s: 1.23.6

  三台服务器(虚拟机):

角色IP
k8smaster192.168.43.129
k8snode130192.168.43.130
k8snode131192.168.43.131

2.初始工作

   所有服务器按步骤执行下列脚本

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
 
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时
 
# 关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
 
# 根据规划设置主机名
hostnamectl set-hostname <hostname>
 
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.43.129 k8smaster
192.168.43.130 k8snode130
192.168.43.131 k8snode131
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. 所有节点安装Docker、kubeadm、kubelet

   Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

  3.1 安装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

  3.2配置Docker镜像加速器

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://z20d161c.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

  3.3 添加阿里云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

  3.4 安装kubeadm,kubelet和kubectl

由于版本更新频繁,这里指定版本号部署:

yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet

4.初始化Master节点

        4.1 在Master上执行初始化脚本。

$ kubeadm init \
  --apiserver-advertise-address=192.168.43.129 \
  --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

  其中,初始化过程中可能出现问题

问题:failed to create sandbox for pod :拉取  registry.k8s.io/pause:3.6 镜像失败 journalctl -xeu kubelet查看的日志报错信息
Failed to create sandbox for pod” err="rpc error: code = Unknown desc = failed to get sandbox image “ registry.k8s.io/pause:3.6”: failed to pull image “ registry.k8s.io/pause:3.6 问题

拉取  registry.k8s.io/pause:3.6 镜像失败 导致sandbox 创建不了而报错

解决:重新配置 sandbox 镜像 仓库,将默认的  registry.k8s.io/pause:3.6 修改成 “ registry.aliyuncs.com/google_containers/pause:3.6”

  步骤1. 生成 containerd 的默认配置文件

containerd config default > /etc/containerd/config.toml

  步骤2. 通过vi修改生成的配置文件

  步骤3. 重启containerd

systemctl daemon-reload
systemctl restart containerd.service

   重启后,可以拉去镜像了。

        4.2 初始化成功后,执行以下脚本

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

5.加入节点node1,node2

  初始化master节点后,不要清屏,复制初始化成功后输出的结果

  将复制的脚本在node1,node2服务器上执行

kubeadm join 192.168.43.129:6443 --token l80tk9.2hdts2uwxgeqh1ym \
        --discovery-token-ca-cert-hash sha256:bc10f13f52fdace4aa09d5530f3473cf733457d3ccab2c4a8ceaca5724f40d74

  默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

kubeadm token create --print-join-command

6. 部署CNI网络插件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

   使用vi修改kube-flannel.yml配置文件中的docker.io镜像地址

   执行指令:

kubectl apply -f kube-flannel.yml

   查看是否配置成功

 kubectl get pods -n kube-system

Running则表示配置成功

7.测试集群是否部署成功

  在Kubernetes集群中创建一个pod,验证是否正常运行:

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

   浏览器访问192.168.43.131:31941 、192.168.43.130:31941 、192.168.43.129:31941查看效果

8. 在任意节点Node中使用kubectl

         完成以上7个步骤后,还存在一个问题,节点服务器中无法使用kubectl命令行,按要求可以配置节点Node也可以使用kubectl命令行

解决:

   步骤1. 将master 节点中/etc/kubernetes/admin.conf 配置文件拷贝到需要运行的Node服务器的/etc/kubernetes目录中

scp /etc/kubernetes/admin.conf root@192.168.43.130:/etc/kubernetes

   步骤2. 在对应的节点服务器上配置环境变量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

  测试,是否可以使用kubectl


 至此,集群部署成功啦!

Logo

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

更多推荐