欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo

程序员文章站 2022-05-01 14:49:05
...

 

简介

K8s集群部署有三种方式:Kubeadm、minikube和二进制包,本文直接使用kubeadm来部署

描述

本文只使用两台虚拟机,一台是Master节点,一台是Node节点。虚拟机的IP,如下命令查到

ifconfig

Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo

准备工作

第一步:一定要改每台虚拟机的主机名,进入系统设置

Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo

选择Detail,进入Overview,直接修改DeviceName,Master节点和Node节点都需要改,而且不能重名。

Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo

主机名 IP
ubuntu-master 192.168.29.137
kube-slave 192.168.29.136

第二步(可选):配置主机名映射,Master节点和Node节点都需要配置,如下图,如果hostname 文件是readonly的话,可以使用

sudo chmod 777 /etc/hostname

 然后把主机名和IP加入到hostname中。

cat /etc/hostname

  第三步: 在所有节点上安装kubeadm,这里使用阿里云的系统和kubernetes的源。

$ cat /etc/apt/sources.list
# 系统安装源
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
# kubeadm及kubernetes组件安装源
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

更新源并安装kubeadm, kubectl, kubelet软件包

apt-get update -y && apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated

安装docker,当前kubeadm不支持docker.ce

apt-get install docker.io -y

使用kubeadmin初始化master节点

这个下载镜像的过程涉及*,因为会从gcr的站点下载容器镜像,这里一定要连接VPN,不然初始化不成功, 这里要指定apiserver-advertise-address

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.29.137

执行的时候却报了一个错,如下图

Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo

 提示说需要disable swap,因为Kubernetes v1.8+ 要求关闭系统 Swap,修改/etc/fstab 文件,它永久性地关闭swap space, 只需在下面两行前面加上(#),然后重启虚拟机。或者直接运行sudo swapoff -a

Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo

如果还出错,执行下面命令之后,再执行kubeadm init

kubeadm reset

直到看到下面的图片,就表示执行成功了,如下图:

Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo

 执行如下命令来配置kubectl

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

这样master的节点就配置好了,并且可以使用kubectl来进行各种操作了,根据上面的提示接着往下做,需要安装一个网络插件

然后再将slave节点加入到集群。

安装一个网络插件canal

canal官方文档参考,如下网址下载2个文件并且安装,其中一个是配置canal的RBAC权限,一个是部署canal的DaemonSet。但笔者是从这里(Installing a pod network add-on)参考的,根据kubeadm init时用到的--pod-network-cidr=10.244.0.0/16,所以选择了canal.

Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo

执行以上两条命令:

kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/rbac.yaml

clusterrole.rbac.authorization.k8s.io "calico" created
clusterrole.rbac.authorization.k8s.io "flannel" created
clusterrolebinding.rbac.authorization.k8s.io "canal-flannel" created
clusterrolebinding.rbac.authorization.k8s.io "canal-calico" created


kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/canal.yaml

configmap "canal-config" created
daemonset.extensions "canal" created
customresourcedefinition.apiextensions.k8s.io "felixconfigurations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "bgpconfigurations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "ippools.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "clusterinformations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "globalnetworkpolicies.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "networkpolicies.crd.projectcalico.org" created
serviceaccount "canal" created

执行如下命令,可以就可以查看canal的安装状态了

aaa@qq.com:/home/cong# kubectl get pod -n kube-system -o wide
NAME                                    READY     STATUS     RESTARTS   AGE       IP               NODE
canal-66gd7                             3/3       NodeLost   0          16h       192.168.29.136   ubuntu
canal-9j4pj                             3/3       Running    0          16h       192.168.29.137   ubuntu-master
canal-smjbw                             3/3       Running    0          16h       192.168.29.136   kube-slave
coredns-78fcdf6894-jcswx                1/1       Running    0          16h       10.244.0.6       ubuntu-master
coredns-78fcdf6894-k9qxw                1/1       Running    0          16h       10.244.0.7       ubuntu-master
etcd-ubuntu-master                      1/1       Running    0          16h       192.168.29.137   ubuntu-master
kube-apiserver-ubuntu-master            1/1       Running    0          16h       192.168.29.137   ubuntu-master
kube-controller-manager-ubuntu-master   1/1       Running    0          16h       192.168.29.137   ubuntu-master
kube-proxy-95v7c                        1/1       Running    0          16h       192.168.29.137   ubuntu-master
kube-proxy-h2gl7                        1/1       Running    0          16h       192.168.29.136   kube-slave
kube-proxy-vzhzw                        1/1       NodeLost   0          16h       192.168.29.136   ubuntu
kube-scheduler-ubuntu-master            1/1       Running    0          16h       192.168.29.137   ubuntu-master

Slave节点加入集群

打开另一台虚拟机,执行如下命令,就可以这台Node节点的机器加入到集群中。

kubeadm join 192.168.29.137:6443 --token aoanr5.geidnr74gvp5xrlc --discovery-token-ca-cert-hash sha256:beb198cf8a70ff17c96b387b06de16d6973f9b8cacb1a8e1586b52ff5f84db0c

这时他会报个错,如下图:

Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo

 可以从图中看出,是因为少了一些kernel moudules,我们依次运行:

modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4

如果还遇到swap的问题,可以运行sudo swapoff -a,然后再运行上面的kubeadm join的代码,最后就执行成功了,如下图:

Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo

 在Master 上运行kube get nodes, 结果如下:

aaa@qq.com:/home/cong# kubectl get nodes
NAME            STATUS     ROLES     AGE       VERSION
kube-slave      Ready      <none>    16h       v1.11.1
ubuntu-master   Ready      master    17h       v1.11.1

大功告成,加油!