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

释放双眼,带上耳机,听听看~!

系列链接

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

Kubernetes系列之二:将Slave节点加入集群

Kubernetes系列之三:部署你的第一个应用程序到k8s集群

Kubernetes系列之四:使用yaml文件创建deployment来部署一个应用程序到k8s集群

Kubernetes系列之五:使用yaml文件创建service向外暴露服务

Kubernetes系列之六:安装k8s通用的Web UI(Dashboard)

Kubernetes系列之N:使用K8s遇到的问题

简介

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

描述

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


1
2
1ifconfig
2

准备工作

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

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

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

1
1

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


1
2
1sudo chmod 777 /etc/hostname
2

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


1
2
1cat /etc/hostname
2

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


1
2
3
4
5
6
7
8
9
10
11
12
1$ cat /etc/apt/sources.list
2# 系统安装源
3deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
4deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
5deb http://mirrors.aliyun.com/ubuntu/ xenial universe
6deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
7deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
8deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
9deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
10# kubeadm及kubernetes组件安装源
11deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
12

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


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

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


1
2
1apt-get install docker.io -y
2

使用kubeadmin初始化master节点

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


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

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

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

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


1
2
1kubeadm reset
2

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

 执行如下命令来配置kubectl


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

这样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.

执行以上两条命令:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
2
3clusterrole.rbac.authorization.k8s.io "calico" created
4clusterrole.rbac.authorization.k8s.io "flannel" created
5clusterrolebinding.rbac.authorization.k8s.io "canal-flannel" created
6clusterrolebinding.rbac.authorization.k8s.io "canal-calico" created
7
8
9kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/canal.yaml
10
11configmap "canal-config" created
12daemonset.extensions "canal" created
13customresourcedefinition.apiextensions.k8s.io "felixconfigurations.crd.projectcalico.org" created
14customresourcedefinition.apiextensions.k8s.io "bgpconfigurations.crd.projectcalico.org" created
15customresourcedefinition.apiextensions.k8s.io "ippools.crd.projectcalico.org" created
16customresourcedefinition.apiextensions.k8s.io "clusterinformations.crd.projectcalico.org" created
17customresourcedefinition.apiextensions.k8s.io "globalnetworkpolicies.crd.projectcalico.org" created
18customresourcedefinition.apiextensions.k8s.io "networkpolicies.crd.projectcalico.org" created
19serviceaccount "canal" created
20

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1root@ubuntu:/home/cong# kubectl get pod -n kube-system -o wide
2NAME                                    READY     STATUS     RESTARTS   AGE       IP               NODE
3canal-66gd7                             3/3       NodeLost   0          16h       192.168.29.136   ubuntu
4canal-9j4pj                             3/3       Running    0          16h       192.168.29.137   ubuntu-master
5canal-smjbw                             3/3       Running    0          16h       192.168.29.136   kube-slave
6coredns-78fcdf6894-jcswx                1/1       Running    0          16h       10.244.0.6       ubuntu-master
7coredns-78fcdf6894-k9qxw                1/1       Running    0          16h       10.244.0.7       ubuntu-master
8etcd-ubuntu-master                      1/1       Running    0          16h       192.168.29.137   ubuntu-master
9kube-apiserver-ubuntu-master            1/1       Running    0          16h       192.168.29.137   ubuntu-master
10kube-controller-manager-ubuntu-master   1/1       Running    0          16h       192.168.29.137   ubuntu-master
11kube-proxy-95v7c                        1/1       Running    0          16h       192.168.29.137   ubuntu-master
12kube-proxy-h2gl7                        1/1       Running    0          16h       192.168.29.136   kube-slave
13kube-proxy-vzhzw                        1/1       NodeLost   0          16h       192.168.29.136   ubuntu
14kube-scheduler-ubuntu-master            1/1       Running    0          16h       192.168.29.137   ubuntu-master
15
16

Slave节点加入集群

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


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

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

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


1
2
3
4
5
6
1modprobe ip_vs
2modprobe ip_vs_rr
3modprobe ip_vs_wrr
4modprobe ip_vs_sh
5modprobe nf_conntrack_ipv4
6

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

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


1
2
3
4
5
6
1root@ubuntu:/home/cong# kubectl get nodes
2NAME            STATUS     ROLES     AGE       VERSION
3kube-slave      Ready      <none>    16h       v1.11.1
4ubuntu-master   Ready      master    17h       v1.11.1
5
6

大功告成,加油!

给TA打赏
共{{data.count}}人
人已打赏
安全运维

故障复盘的简洁框架-黄金三问

2021-9-30 19:18:23

安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索