kubernets集群从零搭建

kubernets集群从零搭建

前言:本文参考《kubernetes权威指南第5版》所写,对一些地方进行了润色,给大家踩掉了一些坑,方便了大家的环境搭建。

环境准备
采用Vmware workstation在本机中许你一个64位的Centos7虚拟机将作为学习环境。虚拟机采用NAT的网络模式以便连接外网,然后使用kubeadm快速安装一个kubernetes集群

最低配置:
集群规模为1~5个节点时,要求如下。
Master:至少1coreCPU和2GB内存。(推荐:4coreCPU和16GB内存)
node:至少1coreCPU和1GB内存。

一、环境预处理

1.1关闭防火墙

$ systemctl disable firewalld
$ systemctl stop firewalld

1.2禁用SELinux(修改文件/etc/sysconfig/selinx,将SELINUX=enforcing修改为SELINUX=disabled),让容器可以读取主机文件系统。随着Kubernetes对SELinux支持的增强,可以逐步启用SELinux机制。

1.3kubeadm还需要关闭Linux的swap系统交换分区,这可以通过swapoff -a 命令实现。

# 临时关闭
  $ swapoff -a 
# 永久关闭
  # 编辑/etc/fstab文件,注释掉swap这行

二、使用kubeadm工具快速安装kubernetes集群(以centos7为例)

2.1首先配置yum源,这里使用aliyun的yum源。/etc/yum.repo/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

2.2然后运行yum install 命令安装kubeadm、kubelet和kubectl

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

2.3kubeadm将使用kubelet服务以的容器方式部署和启动kubernetes的主要服务,所以需要先启动kubelet服务。运行systemctl start命令启动kubelet服务,并设置为开机自动启动。

$ systemctl start kubelet
$ systemctl enable kubelet

2.4运行kubeadm config print init-defaults命令,可以获得默认的初始化参数文件:

$ kubeadm config print init-defaults > init.default.yaml

可对生成的文件进行编辑,可以按需生成合适的配置。例如,如需要自定义镜像的仓库地址、需要安装kubernetes版本号及pod的IP地址范围。
将上面的内容保存为init-config.yaml备用。

2.5下载kubernetes的相关镜像

为了加快kubeadm创建集群的过程,可以预先将所需镜像下载完成。可以通过kubeadm config images list命令查看镜像列表,例如:

[root@k8s-master ~]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.22.2
k8s.gcr.io/kube-controller-manager:v1.22.2
k8s.gcr.io/kube-scheduler:v1.22.2
k8s.gcr.io/kube-proxy:v1.22.2
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4

如果无法访问k8s.gcr.io,则可以使用国内镜像托管站点进行下载,例如https://a8qh6yqv.mirror.aliyuncs.com,这可以通过修改Docker服务的配置文件(默认为/etc/docker/daemon.json)进行设置,例如:

{
  "registry-mirrors": [
    "https://a8qh6yqv.mirror.aliyuncs.com"
  ],
  .............
}

2.6另外,Kubernetes默认设置cgroup驱动为“systemd",而Docker服务的cgroup驱动默认值为"cgroupfs",建议将其修改为”systemd“,与Kubernetes保持一致,否则kubelet会启动失败。这可以通过修改Docker服务的配置文件(默认为/etc/docker/daemon.json)进行设置

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

2.7然后,使用kubeadm config images pull命令或者docker pull命令下载上述镜像,例如:

$ kubeadm config images pull --config=init-config.yaml

在镜像下载完成之后,就可以进行安装了。

2.7运行kubeadm init 命令安装Master节点
至此,准备工作已经就绪,运行kubeadm init命令即可一键安装Kubernetes的Master节点,也称之为Kuberntes控制平面(Control Plane)。
如果报网络超时,在执行kubeadm init时指定国内镜像源,例如:

$ kubeadm init  --config=init-config.yaml   --image-repository=registry.aliyuncs.com/google_containers

# 此为上条命令的屏显
-------------------------------------------------------------
# 会有很多屏显内容输出 此处省略..
Your Kubernetes control-plane has initialized successfully!
--------------------------------------------------------------
kubeadm join 192.168.1.128:6443 --token m4sbu3.xjkly4h9rp66fmxb --discovery-token-ca-cert-hash sha256:8fb55a85059f3eccb126e6613dcb60f98664adac44f2040ef73a9696b7d257eb 

2.7.1若kubeadm init运行报错:[ERROR FileContent–proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1,解决方法如下:

$ echo "1" > /proc/sys/net/bridge/bridge-nf-call-ip6tables
$ echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables

2.8到此,屏幕会显示很多信息。如果你看到**”Your Kubernetes control-plane has initialized successfully!“**的提示,就说明Master节点(控制平面)已经安装成功了。
接下来就可以通过kubectl命令行工具访问集群进行操作了。由于kubeadm默认使用CA证书,所以需要为kubectl配置证书才能访问到Master。

按照安装成功的提示,非root用户可以将admin.conf配置文件复制到HOME目录的.kube子目录下,命令如下:

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

如果用户是root,则也可以通过设置环境变量KUBECONFIG完成对kubectl的配置:

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >>/etc/profile  && source /etc/profile

然后就可以使用kubectl命令行工具对Kubernetes集群进行访问和操作了。
例如查看命名空间kube-system中的ConfigMap列表:

[root@k8s-master ~]# kubectl -n kube-system get configmap
NAME                                 DATA   AGE
calico-config                        4      5d22h
coredns                              1      6d17h
extension-apiserver-authentication   6      6d17h
kube-proxy                           2      6d17h
kube-root-ca.crt                     1      6d17h
kubeadm-config                       1      6d17h
kubelet-config-1.22                  1      6d17h

2.9到此,Kubernetes的Master节点已经可以工作了,但在集群内还是没有可以的Worker Node,并缺乏容器网络的配置。接下来安装Work Node,需要用到kubeadm init命令运行完成后的最后几行提示信息,其中包含将节点加入集群的命令(kubeadm join)和所需的Token。

三、将新的Node加入集群

对于新节点的添加,系统准备和安装Master节点的过程是一致的,在待安装的各个Node主机上进行下面的安装过程。

3.1安装kubeadm和kubelet(在Node节点上无须安装kubectl)

$ yum install kubelet kueadm --disableexcludes=kubernetes

运行systemctl start命令启动kubelet服务,并设置为开机自启动:

$ systemctl start kubelet
$ systemctl enable kubelet

3.2使用kubeadm join命令加入集群,可以从安装Master节点的成功提示内容中复制完整的命令,例如:

$ kubeadm join 192.168.1.128:6443 --token m4sbu3.xjkly4h9rp66fmxb --discovery-token-ca-cert-hash sha256:8fb55a85059f3eccb126e6613dcb60f98664adac44f2040ef73a9696b7d257eb 

3.3如果需要调整其他配置,则也可以通过自定义配置文件的方式进行操作,通过kubeadm configprint join-defaults命令获取默认配置的内容,再进行修改,例如:

$ kubeadm config print join-defaults >join.config.yaml

3.4运行kubeadm join命令,将本Node加入集群:

$ kubeadm join --config=join.config.yaml

成功将Node加入集群后,可以通过kubectl get nodes 命令确认新的Node已加入:

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   NotReady    control-plane,master   67m   v1.22.2
k8s-node01   NotReady    <none>                 2m9s    v1.22.2

四、安装CNI网络插件

4.1运行kubeadm init 和join命令后,Kubernetes提示个节点均为NotReady状态,这是因为还没有安装CNI网络插件。

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   NotReady    control-plane,master   67m   v1.22.2
k8s-node01   NotReady    <none>                 2m9s    v1.22.2

4.2对于CNI网络插件,可以有许多选择。例如选择Calico CNI插件,运行下面的命令即可一键完成安装:

$ kubectl apply -f "https://docs.projectcalico.org/manifests/calico.yaml"

. 				created
.				created
.				created

4.3在CNI网络插件成功运行之后,再次查看Node,其状态会更新为Ready:

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   Ready    control-plane,master   6d18h   v1.22.2
k8s-node01   Ready    <none>                 6d1h    v1.22.2

五、验证Kubernetes集群是否工作正常

运行查看Pod命令,验证Kubernetes集群服务的Pod是否创建成功且正常运行:

[root@k8s-master ~]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                       READY   STATUS    RESTARTS        AGE
default       mysql-5d659d46fd-x2jf6                     1/1     Running   2 (4d19h ago)   5d18h
default       myweb-55f9758ff-6pvn4                      1/1     Running   2 (4d19h ago)   4d23h
default       myweb-55f9758ff-pxgf6                      1/1     Running   2 (4d19h ago)   4d23h
kube-system   calico-kube-controllers-75f8f6cc59-hztxg   1/1     Running   0               131m
kube-system   calico-node-gwccj                          1/1     Running   2 (4d19h ago)   6d
kube-system   calico-node-pz67g                          1/1     Running   2 (4d19h ago)   6d
kube-system   coredns-7f6cbbb7b8-kwbpq                   1/1     Running   0               131m
kube-system   coredns-7f6cbbb7b8-pbt6v                   1/1     Running   0               131m
kube-system   etcd-k8s-master                            1/1     Running   3 (4d19h ago)   6d18h
kube-system   kube-apiserver-k8s-master                  1/1     Running   3 (4d19h ago)   6d18h
kube-system   kube-controller-manager-k8s-master         1/1     Running   3 (4d19h ago)   6d18h
kube-system   kube-proxy-2nfw9                           1/1     Running   2 (4d19h ago)   6d1h
kube-system   kube-proxy-w6rxx                           1/1     Running   3 (4d19h ago)   6d18h
kube-system   kube-scheduler-k8s-master                  1/1     Running   3 (4d19h ago)   6d18h

如果发现有状态错误的Pod,则可以运行kubectl --namespace=kube-system describe pod <pod_name>命令查看错误原因,常见的错误原因是镜像没有下载完成。

至此,通过kubeadm工具就实现了Kubernetes集群的快速搭建。

如果安装失败,则可以运行kubeadm reset 命令将主机恢复原状,重新运行kubeadm init命令再次进行安装。

感谢收看!大河之剑天上来 哈哈哈哈哈哈哈哈哈哈~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值