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,如下命令查到

ifconfig

准备工作

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

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

主机名IP
ubuntu-master192.168.29.137
kube-slave192.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

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

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

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

kubeadm reset

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

 执行如下命令来配置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.

执行以上两条命令:

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的安装状态了

root@ubuntu:/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

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

 可以从图中看出,是因为少了一些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的代码,最后就执行成功了,如下图:

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

root@ubuntu:/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

大功告成,加油!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值