CentOS7搭建k8s集群

CentOS7搭建k8s集群

硬件准备(所有节点)

  1. 请确保CPU至少2核,内存2G
  2. 禁用防火墙
systemctl stop firewalld
systemctl disable firewalld

注意 : 如果不关闭防火墙,k8s内部服务之间无法通讯。比如无法连接数据库,java.net.UnknownHostException
3. 如果是多台虚拟机,需要保证虚拟机hostname不同。如果几台虚拟机是复制出来的,很可能忘记修改hostname、静态IP
4. 禁用SELINUX

临时禁用
setenforce 0
永久禁用 
vim /etc/selinux/config  
SELINUX=disabled
  1. 修改k8s.conf文件
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system #立即生效
  1. 关闭swap
# 临时关闭
swapoff -a

#永久关闭swap,**重启后生效**,所以最好配合临时关闭方式一起使用
修改 /etc/fstab 文件,注释掉 SWAP 的自动挂载
# 注释掉以下字段
/dev/mapper/cl-swap     swap                    swap    defaults        0 0`
  1. 在/etc/hosts里面一定要有本机的hostname

docker的准备(所有节点)

  1. docker安装CentOS安装docker
  2. 修改docker配置使用systemd (必须配置,不然会报错)
vim  /etc/docker/daemon.json    #可能没有/etc/docker这个文件夹,新建就好了

#粘贴以下内容
{
  "registry-mirrors": ["https://yqbg1qh9.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
 }
systemctl restart docker
systemctl enable docker   #开机启动,

k8s源的准备(所有节点)

由于有墙的限制,所以要使用阿里的yum源

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

yum  clean  all
yum  upgrade

镜像准备(所有节点)

下载k8s所需镜像,registry.cn-hangzhou.aliyuncs.com/google_containers是待会初始化主节点的时候要使用的仓库地址

#!/bin/bash

images=(
	kube-apiserver:v1.21.0
    kube-proxy:v1.21.0
	kube-controller-manager:v1.21.0
	kube-scheduler:v1.21.0
	coredns:v1.8.0
	etcd:3.4.3-0
    pause:3.1
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

所有节点上都要有这些镜像,如果某个node缺少必要镜像,那么这个node拉取镜像会失败。

变成执行文件(所有节点)

chmod 700 ./master_images.sh 

拉取必要镜像(所有节点)

./master_images.sh 

安装软件(所有节点)

yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
systemctl enable kubelet && systemctl start kubelet

初始化master节点(master节点)

kubeadm init --kubernetes-version=1.21.0 \
--apiserver-advertise-address=192.168.56.121 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
kubeadm init --kubernetes-version=1.18.1 \  安装时指定的版本
--apiserver-advertise-address=192.168.56.121 \  **masterIP地址**,我用的静态IP
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \  仓库名称,会从这个仓库拉取镜像
--service-cidr=10.1.0.0/16 \  k8s的Service网络
--pod-network-cidr=10.244.0.0/16  k8s的pod 网络

安装flannel(master节点)

flannel只需要在master安装,安装之后,coredns镜像就是running状态了。新节点加入后会在kube-system空间新建一个flannel容器。
安装flannel时,或许有墙导致下载超时,这里有源文件
在使用这个文件时一定注意,当中有关pod网络的配置,一定要和master初始化时指定的一致

  net-conf.json: |
    {
      "Network": "10.244.0.0/16",     注意这里要和--pod-network-cidr=10.244.0.0/16一致
      "Backend": {
        "Type": "vxlan"
      }

验证

重置

sudo kubeadm reset
rm -rf $HOME/.kube
sudo rm -rf /etc/kubernetes/
sudo rm -rf /var/lib/kubelet/
sudo rm -rf /var/lib/etcd

如果pod调度一直失败,则可能是flannel网络与cni网络不一致造成的,参考下面两篇文章
Kubernetes之network: failed to set bridge addr: “cni0“ already has an IP address different from xxx问题
解决k8s"failed to set bridge addr: “cni0” already has an IP address different from 10.244.1.1/24"
另外,当上面的解决方法适合在普通node节点上执行,在master上只能kubeadm reset了,整个集群重新部署。

排错

  1. coredns:v1.8.0不存在
    在这里插入图片描述
    注意到提示中的仓库路径有两个coredns
    在这里插入图片描述

就把原来的coredns打个标签吧,这个标签必须打,如果某一个node上缺少coredns,就会无法拉取镜像。

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0  \
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
  1. 在master上的请求发送不到node节点
    一般是因为虚拟机使用了多张网卡造成的,参考解决k8s无法通过svc访问其他节点pod的问题
    另外,在修改的时候注意不要改错地方了
    在这里改
    在这里插入图片描述

而不是在头部这一大坨
在这里插入图片描述

注意点

只有master机器上要有k8s所需要的镜像,其他机器只要安装了kubectl、kubedam、kubelet就可以了
默认在node节点不能使用kubectl命令,如果想使用则需要把master下的/etc/kubernetes/admin.conf复制到node相同的路径下,再在node上执行

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

k8s默认无法想master节点调度,如果只是搭建一台测试环境,则需要允许向master节点调度。

kubectl taint node <k8s-master-name> node-role.kubernetes.io/master-

如果master节点想恢复不能调度的状态则

kubectl taint node <k8s-master-name> node-role.kubernetes.io/master=""

生成新的加入集群命令

kubeadm token create --print-join-command

常用命令

sudo journalctl -xe | grep cni   查看cni日志

参考

https://blog.csdn.net/shykevin/article/details/105526586?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

https://blog.csdn.net/weixin_42715225/article/details/112969089

https://blog.csdn.net/zh452647457/article/details/118078110

https://blog.csdn.net/weixin_38169886/article/details/99809114

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值