【云原生】kubeadm安装kubernets集群

1、kubernets的几种安装方式

minikube

  •  优点:简单快速,适合本地开发。
  •  缺点:功能有限,不适合在生产环境部署。

kubeadm

  •  优点:你只要安装kubeadm即可;kubeadm会帮你自动部署安装K8S集群;如:初始化K8S集群、配置各个插件的证书认证、部署集群网络等。安装简易。
  •  缺点:不是自己一步一步安装,可能对K8S的理解不会那么深;并且有那一部分有问题,自己不好修正。

二进制安装

  •  优点:K8S集群所有东西,都由自己一手安装搭建;清晰明了,更加深刻细节的掌握K8S;哪里出错便于快速查找验证。
  •  缺点:安装较为繁琐麻烦,且易于出错。

本文主要介绍的是使用官方的kubeadm工具安装kubernets集群。

2、安装

组件版本

软件版本
操作系统CentOS7.9_x64 
Docker20.10.6
Kubernetes1.23.6

集群机器

角色IP
k8s-master192.168.157.160
k8s-node1192.168.157.161
k8s-node2192.168.157.162

2.1、系统初始化配置

1、修改主机名,修改后重新登录【三台机器设置自己对应的主机名称】
$ hostnamectl set-hostname k8s-master
2、修改 /etc/hosts  文件,添加主机名和 IP 的对应关系:
$ vim /etc/hosts

192.168.157.160 k8s-master
192.168.157.161 k8s-node1
192.168.157.162 k8s-node2
3、关闭防火墙&&永久关闭
$ systemctl stop firewalld && systemctl disable firewalld
 4、关闭selinux&&永久关闭

 关闭 SELinux,否则后续 K8S 挂载目录时可能报错  Permission denied  :

$ setenforce 0

 修改配置文件,永久生效;

$ sed -i 's/enforcing/disabled/' /etc/selinux/config 
5、 关闭swap&&永久关闭

1、如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为false 来忽略 swap on),故需要在每台机器上关闭 swap 分区:

swapoff -a

2、为了防止开机自动挂载 swap 分区,可以注释  /etc/fstab  中相应的条目:

$ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
6、将桥接的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 #使生效
7、同步系统时间
$ yum -y install ntpdate
$ sudo ntpdate cn.pool.ntp.org
8、更改时区
$ timedatectl set-timezone Asia/Shanghai

2.2、安装Docker/kubeadm/kubelet【所有节点】

1、 配置阿里云镜像源

 先删除原有的yum源

$ rm -rf /etc/yum.repos.d/*

下载阿里云源

$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

 配置docker源

$wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

 配置kubenetes源

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

 清除yum缓存

$yum clean all

 缓存阿里云镜像

$yum makecache
2、下载安装Docker
$yum install docker-ce-20.10.6 -y
$systemctl enable docker&&systemctl start docker #设置开机自启并启动

 配置镜像下载加速器 

$vim /etc/docker/daemon.json

{"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://az1z0cl4.mirror.aliyuncs.com"]
}

要重启下docker生效

$systemctl restart docker
3、安装kubeadm,kubelet和kubectl 
$yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
$systemctl enable kubelet&&systemctl start kubelet

3、部署k8s master

3.1、kubeadm初始化(master)
kubeadm init \
  --apiserver-advertise-address=192.168.157.160\
  --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.6 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all
3.2 、初始化结束后会得到一个join命令,保存下,后面要用。
kubeadm join 192.168.157.160:6443 --token mb0mrf.dqk66hl34tdzme81 \
	--discovery-token-ca-cert-hash sha256:901c3dbdc4cabb234ded47749868019ffe6ec9ac463254cf317c3e6d1ee25826
3.3、拷贝kubectl使用的连接k8s认证文件到默认路径:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.4、查看工作节点状态
kubectl get nodes

因为没有安装网络插件所以是NotReady状态 

NAME         STATUS     ROLES                  AGE   VERSION
k8s-master   NotReady   control-plane,master   24m   v1.23.6

4、加入Kubernetes Node

在两个node节点(192.168.157.161和192.168.157.162)分别执行刚刚kubeadm init输出的kubeadm join命令。

kubeadm join 192.168.157.160:6443 --token mb0mrf.dqk66hl34tdzme81 \
	--discovery-token-ca-cert-hash sha256:901c3dbdc4cabb234ded47749868019ffe6ec9ac463254cf317c3e6d1ee25826

如果执行kubeadm join报错可以加上--ignore-preflight-errors=all 

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:

kubeadm token create --print-join-command

执行完了之后再在k8s-master节点执行下kubectl get nodes

NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   44m     v1.23.6
k8s-node1    NotReady   <none>                 3m46s   v1.23.6
k8s-node2    NotReady   <none>                 3m37s   v1.23.6

发现还是NotReady状态,是因为需要下载个网络插件(CNI)

5、部署容器网络(CNI) 安装Pod网络 

常见的网络插件有calico和flannel,两者在功能实现上没有什么区别,唯一有区别的是基础的flannel版本是无法实现自定义的网络路由规则,但是也是可以通过配套其他安装其他第三方插件使用。本文主要介绍使用calico:

5.1下载calico网络插件
wget https://docs.projectcalico.org/manifests/calico.yaml

下载完了之后需要自定义配置下:

#这块要把原来的注释取消,改成改成自己对应的pod网络地址
- name: CALICO_IPV4POOL_CIDR
  value: "10.244.0.0/16"
#这块是需要添加的,原文是没有的。
- name: IP_AUTODETECTION_METHOD
  value: "interface=ens33"

修改完成后执行kubeclt apply -f calico.yaml

5.2  查看节点状态
kubectl get pods -A -owide

等Calico Pod都Running,节点也会准备就绪。一般到这里kubernets集群部署就已经结束了,但是有些同学会遇到各种问题,例如我这次遇到的

NAME                                       READY   STATUS                  RESTARTS        AGE   IP                NODE         NOMINATED NODE   READINESS GATES
calico-kube-controllers-64cc74d646-xnnfk   0/1     ErrImagePull            0               17m   10.244.235.194    k8s-master   <none>           <none>
calico-node-5z76f                          0/1     Init:ImagePullBackOff   0               17m   192.168.157.162   k8s-node2    <none>           <none>
calico-node-6hz2r                          1/1     Running                 0               17m   192.168.157.160   k8s-master   <none>           <none>
calico-node-hkkv5                          0/1     Init:CrashLoopBackOff   5 (104s ago)    17m   192.168.157.161   k8s-node1    <none>           <none>
coredns-65c54cc984-khf8q                   1/1     Running                 0               59m   10.244.235.193    k8s-master   <none>           <none>
coredns-65c54cc984-krqsv                   1/1     Running                 0               59m   10.244.235.195    k8s-master   <none>           <none>
etcd-k8s-master                            1/1     Running                 0               59m   192.168.157.160   k8s-master   <none>           <none>
kube-apiserver-k8s-master                  1/1     Running                 0               59m   192.168.157.160   k8s-master   <none>           <none>
kube-controller-manager-k8s-master         1/1     Running                 1 (2m43s ago)   59m   192.168.157.160   k8s-master   <none>           <none>
kube-proxy-86lmh                           1/1     Running                 0               18m   192.168.157.161   k8s-node1    <none>           <none>
kube-proxy-k2nv2                           1/1     Running                 0               59m   192.168.157.160   k8s-master   <none>           <none>
kube-proxy-k86np                           1/1     Running                 0               18m   192.168.157.162   k8s-node2    <none>           <none>
kube-scheduler-k8s-master                  1/1     Running                 1 (2m47s ago)   59m   192.168.157.160   k8s-master   <none>           <none>

这时候kubernets有个kubectl describe命令就可以来查看日志 

kubectl describe pods calico-node-5z76f -n kube-system

发现报错是因为拉取calico的镜像失败,排查是因为网络限制,无法访问国外的网络,这里安利一个免费的Docker Proxy 镜像加速 。当遇到这种因为无法拉取国外的镜像失败可以通过代理网站转换下。

  • 50
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值