centos环境下搭建k8s

centos环境下搭建k8s

      最近在学习k8s,并且尝试在自己的服务器上搭建k8s,中间遇到不少坑,重装系统N次,后面成功搭建出来,将这个过程记录下来,方便以后查看

      建议操作前先将master跟node节点内核更新到最新,我是更新后再操作,大家可以参考这一篇教程Centos更新内核,master节点跟node都是Centos7,内核都是5.15。

      一、基本环境配置

      以下这些操作master节点跟node节点都是需要操作的步骤。

      1、关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

      2、关闭selinux

setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

      3、修改主机名

      我们根据master、node节点修改主机名

#master主机
hostnamectl set-hostname k8s-master
#node主机
hostnamectl set-hostname k8s-node1

修改完之后重启服务器进行生效

reboot

      4、关闭 swap

      我们编辑 /etc/fstab文件,注释掉swap这一行

vi /etc/fstab

或者临时关闭

swapoff -a

检查是否生效

free -m

      5、修改hosts

       添加主机名与 IP 对应的关系,/etc/hosts 添加如下内容

vi /etc/hosts
95.214.113.168 k8s-master
45.136.235.229 k8s-node1

      6、允许 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

重启配置

sysctl --system

      7、安装docker

      建议按照指定版本安装,后面不知道出现什么奇奇怪怪的问题

      先卸载旧的 docker

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

      安装组件

yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

      添加 docker 安装源

yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

  如果服务器是国内的,建议docker安装源切换成这个比较快

yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

     查看docker可安装列表

yum list docker-ce --showduplicates | sort -r

     安装 docker

yum install -y containerd.io-1.2.10 docker-ce-19.03.4 docker-ce-cli-19.03.4

      安装成功后,查看 docker 版本

docker --version

      修改docker配置

mkdir -p /etc/docker
vi /etc/docker/daemon.json

内容为以下

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

      设置开机启动

systemctl enable docker
systemctl start docker

      查看docker信息

docker info | grep Driver

       9、时间同步

       由于我的master节点服务器是美国服务器,node节点是美国服务器,但是有时机器是不同地区,时间需要同步,我直接将

master、node节点的服务器时间都同步成国内时间,这一步大家根据自身情况进行修改。

yum install -y ntp 

systemctl enable ntpd 

systemctl start ntpd

timedatectl set-timezone Asia/Shanghai 

timedatectl set-ntp yes

ntpq -p

      二、配置安装k8s

      以下这些操作master节点跟node节点都是需要操作的步骤,建议按照教程指定版本安装,我试过最高版本安装,出现奇奇

怪怪的问题。

      1、修改Kubernetes yum源配置

      修改/etc/yum.repos.d/kubernetes.repo,这里我是按照官网的教程来写

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

      2、安装k8s

      所有节点安装kubeadm、kubectl、kubelet

yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3 --disableexcludes=kubernetes

      3、设置 k8s 开机启动

systemctl enable kubelet

      4、启动 k8s 后台 daemon

systemctl start kubelet

      三、master 节点操作

      以下操作只在 master 节点运行,如果操作失败,可以通过以下命令来清理环境重新安装

rm -rf $HOME/.kube
kubeadm reset

      1、部署 Kubernetes Master

       如果不知道kubeadm版本号多少,可以通过以下命令查看

kubeadm version

       初始化启动Kubernetes 

kubeadm init \
  --apiserver-advertise-address=95.214.113.168 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.17.3 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all
# 说明
--apiserver-advertise-address 集群通告地址,这里我选的是当前master节点的IP
--image-repository  由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
--kubernetes-version K8s版本,与上面安装的一致
--service-cidr 集群内部虚拟网络,Pod统一访问入口
--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致

这一步如果报错可以通过以下命令后重置

rm -rf $HOME/.kube
kubeadm reset

安装后需要将这一截保存,后面子节点加入需要用到

4.png

记录生成的最后部分内容,此内容需要在其它节点加入 Kubernetes 集群之前就执行。根据 init 后的提示,创建kubectl

 配置文件

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

      查看 docker 镜像:

sudo docker images

      使用 kubectl 命令查看节点情况

kubectl get node

 发现master 节点状态为NotReady(由于我们还没安装网络扩展),此时可执行以下命令查看服务状态

systemctl status kubelet

发现kubectl此时已经处于运行状态。

      2、安装calico网络

      下载配置文件

wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml

  修改配置文件,大概在625行左右

找到 625 行左右的 192.168.0.0/16 ,并修改为我们初始化时配置的 10.244.0.0/16

       加载配置文件

 kubectl apply -f calico.yaml

       查看 calico网络是否创建成功

kubectl get pods -n kube-system

3.png

      再次查看 node,可以看到 master 节点状态为 ready

kubectl get node

至此,k8s master节点创建完毕,下面我们操作node节点。

      四、node 节点操作

      在操作前,我们需要先把基本环境配置以及配置安装k8s这两节操作完成,然后在node节点输入以下命令加入集群

kubeadm join 95.214.113.168:6443 --token 6btq2l.x3srd3m00d99y98u \
        --discovery-token-ca-cert-hash sha256:3e13582a0a673519680545fc690767f9b80f456ec1d07c3d98ab7f5b3d508016

出现如下情况表示成功

2.png

如果令牌过期了,可以使用这个命令重新生成令牌

kubeadm token create --print-join-command

      五、master 节点查看集群节点数

kubectl get nodes

我们可以看到node1节点加入了。

      我们重新输入以下命令查看运行结果,这里要等一段时间才可以。

kubectl get pods -n kube-system

1.png


      发现全部处于Running,并且都有一个可用,这样我们就完成了k8s集群的搭建。

0条评论

发表评论