admin管理员组文章数量:1649938
1、kubernets的几种安装方式
minikube
- 优点:简单快速,适合本地开发。
- 缺点:功能有限,不适合在生产环境部署。
kubeadm
- 优点:你只要安装kubeadm即可;kubeadm会帮你自动部署安装K8S集群;如:初始化K8S集群、配置各个插件的证书认证、部署集群网络等。安装简易。
- 缺点:不是自己一步一步安装,可能对K8S的理解不会那么深;并且有那一部分有问题,自己不好修正。
二进制安装
- 优点:K8S集群所有东西,都由自己一手安装搭建;清晰明了,更加深刻细节的掌握K8S;哪里出错便于快速查找验证。
- 缺点:安装较为繁琐麻烦,且易于出错。
本文主要介绍的是使用官方的kubeadm工具安装kubernets集群。
2、安装
组件版本
软件 | 版本 |
---|---|
操作系统 | CentOS7.9_x64 |
Docker | 20.10.6 |
Kubernetes | 1.23.6 |
集群机器
角色 | IP |
---|---|
k8s-master | 192.168.157.160 |
k8s-node1 | 192.168.157.161 |
k8s-node2 | 192.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
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/repo/Centos-7.repo
配置docker源
$wget https://mirrors.aliyun/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/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun/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","https://az1z0cl4.mirror.aliyuncs"]
}
要重启下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-hangzhou.aliyuncs/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/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 镜像加速 。当遇到这种因为无法拉取国外的镜像失败可以通过代理网站转换下。
版权声明:本文标题:【云原生】kubeadm安装kubernets集群 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729509091a1203834.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论