云网牛站
所在位置:首页 > Linux云服务器 > 使用Weave Net CNI在Ubuntu 18.04中设置3节点Kubernetes集群

使用Weave Net CNI在Ubuntu 18.04中设置3节点Kubernetes集群

2019-02-13 21:25:12作者:梁叹稿源:云网牛站

本文带你完成在Ubuntu 18.04操作系统上安装和设置工作3节点Kubernetes Cluster的步骤。

 

Ubuntu 18.04上的Kubernetes - 系统图

此设置基于以下图表:

使用Weave Net CNI在Ubuntu 18.04中设置3节点Kubernetes集群

在我们继续下一步之前,让我们配置系统主机名:

在主节点上:

设置主机名如下:

$ sudo hostnamectl set-hostname k8s-master

在工作节点01上:

使用hostamectl命令行工具设置主机名:

$ sudo hostnamectl set-hostname k8s-node-01

在工作节点02上:

还为Kubernetes worker节点02设置主机名:

$ sudo hostnamectl set-hostname k8s-node-02

在每个主机上配置了正确的主机名后,使用配置的值在每个节点上填充:

$ cat /etc/hosts

192.168.2.2 k8s-master 

192.168.2.3 k8s-node-01 

192.168.2.4 k8s-node-02

 

在Ubuntu 18.04上安装Kubernetes前基本条件

在进行任何Kubernetes特定配置之前,让我们确保所有deps都到位,在这里,我们将进行系统更新并创建Kubernetes用户。

在所有节点上将系统软件包更新到最新版本:

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install linux-image-extra-virtual

sudo reboot

添加用户以管理Kubernetes集群:

sudo useradd -s /bin/bash -m k8s-admin

sudo passwd k8s-admin

sudo usermod -aG sudo k8s-admin

echo "k8s-admin ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/k8s-admin

如果你希望在运行sudo命令时输入sudo密码为k8s-admin用户,则可以忽略最后一行,可以测试sudo是否没有密码提示:

$ su - k8s-admin

k8s-admin@k8s-master:~$ sudo su -

root@k8s-master:~#

一切看起来都不错,让我们继续安装Docker引擎。

 

安装Docker Engine

Kubernetes要求docker运行用于托管应用程序和其他Kubernetes服务的容器,我们有一个全面的Docker安装指南:在Ubuntu 18.04系统中安装指定docker版本的简单方法

如果你需要快速安装指南,请使用以下命令在Ubuntu 18.04上安装Docker Engine,确保系统上已卸载任何旧版本的Docker引擎:

sudo apt-get remove docker docker-engine docker.i

安装依赖项:

$ sudo apt-get install \

apt-transport-https \

ca-certificates \

curl \

software-properties-common

导入Docker存储库GPG密钥:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo add-apt-repository \

"deb [arch=amd64] https://download.docker.com/linux/ubuntu \

$(lsb_release -cs) \

stable"

安装docker:

sudo apt-get update

sudo apt-get install docker-ce

sudo usermod -aG docker k8s-admin

安装docker后,你可以继续配置Kubernetes主节点。

 

安装和配置Kubernetes Master

将在此节上执行的所有命令都应在主节点上运行,不要在Kubernetes工作节点上执行任何命令,Kubernetes Master组件提供集群的控制平面,API服务器,调度程序,控制器管理器,它们对集群做出全局决策,例如调度,检测和响应集群事件。

1、添加Kubernetes存储库

我们将为Ubuntu 16.04添加一个存储库,我测试了它,所有包和依赖项应该安装正常:

# cat <<EOF > /etc/apt/sources.list.d/kubernetes.list

deb http://apt.kubernetes.io/ kubernetes-xenial main

EOF

然后导入GPG密钥:

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

更新apt包索引:

sudo apt update

2、安装Kubernetes主组件

安装kubectl,kubelet,kubernetes-cni和kubeadm Kubernetes主要组件:

sudo apt install kubectl kubelet kubeadm kubernetes-cni

确认文件系统上存在所有程序包二进制文件:

$ which kubelet

/usr/bin/kubelet

$ which kubeadm

/usr/bin/kubeadm

如果打开交换,请将其关闭:

sudo swapoff -a

3、初始化Kubernetes集群

安装完所有Kubernetes软件包后,你就可以使用kubeadm命令行工具初始化集群。

导出所需变量(可选):

export API_ADDR=`ifconfig eth0 | grep 'inet'| cut -d':' -f2 | awk '{print $1}'`

export DNS_DOMAIN="k8s.local"

export POD_NET="10.4.0.0/16"

export SRV_NET="10.5.0.0/16"

然后使用上面定义的变量初始化Kubernetes集群:

kubeadm init --pod-network-cidr ${POD_NET} --service-cidr ${SRV_NET} \

--service-dns-domain "${DNS_DOMAIN}" --apiserver-advertise-address ${API_ADDR}

如果一切顺利,你应该获得成功消息,其中包含下一步操作说明:

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.

Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:

https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node

as root:

kubeadm join 192.168.2.2:6443 --token 9y4vc8.h7jdjle1xdovrd0z --discovery-token-ca-cert-hash sha256: cff9d1444a56b24b4a8839fe614566695db273c

4、在主服务器上为k8s-admin用户配置Access

切换到k8s-admin并使用群集信息复制Kubernetes配置文件:

su - k8s-admin

mkdir -p $HOME/.k8s

sudo cp -i /etc/kubernetes/admin.conf $HOME/.k8s/config

sudo chown $(id -u):$(id -g) $HOME/.k8s/config

export KUBECONFIG=$HOME/.k8s/config

echo "export KUBECONFIG=$HOME/.k8s/config" | tee -a ~/.bashrc

 

将Weave Net POD网络部署到群集(以普通用户身份运行)

Weave Net创建了一个虚拟网络,可以跨多个主机连接Docker容器并启用它们的自动发现,由Weave网络上的应用程序容器提供的服务可以暴露给外部世界,无论它们在何处运行。

可以使用单个命令将Weave Net安装到启用CNI的Kubernetes集群上:

# su - k8s-admin

$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

serviceaccount/weave-net created

clusterrole.rbac.authorization.k8s.io/weave-net created

clusterrolebinding.rbac.authorization.k8s.io/weave-net created

role.rbac.authorization.k8s.io/weave-net created

rolebinding.rbac.authorization.k8s.io/weave-net created

daemonset.extensions/weave-net created

几秒钟后,Weave Net pod应该在每个节点上运行,你创建的任何其他pod将自动连接到Weave网络:

k8s-admin@k8s-master:~$ kubectl get pod -n kube-system | grep weav

使用Weave Net CNI在Ubuntu 18.04中设置3节点Kubernetes集群

 

设置Kubernetes工作节点

当Kubernetes集群已初始化且主节点处于联机状态时,请启动工作节点配置,节点是Kubernetes中的工作机器,它可以是VM或物理机器,每个节点由主服务器管理,并具有运行pods所需的服务-docker,kubelet,kube-proxy。

第1步:确保已安装Docker(已覆盖)

确保在所有Worker节点上安装docker引擎。

第2步:添加Kubernetes存储库(已覆盖)

确保将Kubenetes包的存储库添加到系统中。

第3步:安装Kubenetes组件

添加Kubernetes存储库后,使用以下命令安装组件:

sudo apt install kubelet kubeadm kubectl kubernetes-cni

第4步:将节点加入群集:

使用初始化Kubernetes集群后给出的join命令,例如:

kubeadm join 192.168.2.2:6443 --token 9y4vc8.h7jdjle1xdovrd0z \

--discovery-token-ca-cert-hash sha256: cff9d1444a56b24b4a8839fe614566695db273c

---

[tlsbootstrap] Waiting for the kubelet to perform the TLS Bootstrap...

[patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "k8s-node-02" as an annotation

This node has joined the cluster:

* Certificate signing request was sent to master and a response was received.

* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the master to see this node join the cluster.

完成后,检查主服务器上的节点状态:

k8s-admin@k8s-master:~$ kubectl get nodes

使用Weave Net CNI在Ubuntu 18.04中设置3节点Kubernetes集群

在两个节点上,应配置Weave Net:

root@k8s-node-01:~# ip ad | grep weave

6: weave: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1376 qdisc noqueue state UP group default qlen 1000

inet 10.44.0.0/12 brd 10.47.255.255 scope global weave

9: vethwe-bridge@vethwe-datapath: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1376 qdisc noqueue master weave state UP group default

root@k8s-node-02:~# ip ad | grep weave

6: weave: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1376 qdisc noqueue state UP group default qlen 1000

inet 10.47.0.0/12 brd 10.47.255.255 scope global weave

9: vethwe-bridge@vethwe-datapath: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1376 qdisc noqueue master weave state UP group default

1、测试Kubernetes部署

让我们创建测试窗格以确认我们的集群正在按预期运行:

使用Weave Net CNI在Ubuntu 18.04中设置3节点Kubernetes集群

2、将其部署到群集

创建测试命名空间:

$ kubectl create namespace test-namespace

namespace/test-namespace created

创建命名空间后,使用先前定义的部署对象创建一个pod,-n用于指定命名空间,我们预计会创建三个pod,因为我们的副本值为3:

$ kubectl create -n test-namespace -f http-app-deployment.yml

deployment.extensions/http-app created

确认:

$ kubectl -n test-namespace get deployments

使用Weave Net CNI在Ubuntu 18.04中设置3节点Kubernetes集群

你可以看到我们有实时的http-app部署。

创建部署后,我们可以使用kubectl创建一个服务,该服务在特定端口上公开Pod,另一种方法是使用YAML定义Service对象,以下是我们的服务定义:

$ cat http-app-service.yml 

使用Weave Net CNI在Ubuntu 18.04中设置3节点Kubernetes集群

使用kubectl命令创建服务:

$ kubectl -n test-namespace create -f http-app-service.yml 

service/http-app-svc created

此服务将在群集IP和端口30080上提供,要获取群集IP,请使用:

$ kubectl -n test-namespace get svc

使用Weave Net CNI在Ubuntu 18.04中设置3节点Kubernetes集群

3、Ubuntu 18.04上的Kubernetes安装后

为kubectl命令启用shell自动完成,kubectl包括自动完成支持,可以节省大量的输入,要在当前会话中启用shell完成,请运行:

source <(kubectl completion bash)

要将kubectl自动完成添加到你的配置文件中,因此它将在以后的shell运行中自动加载:

echo "source <(kubectl completion bash)" >> ~/.bashrc

如果你使用zsh编辑~/.zshrc文件并添加以下代码以启用kubectl自动完成:

if [ $commands[kubectl] ]; then

source <(kubectl completion zsh)

fi

或者在使用Oh-My-Zsh时,编辑~/.zshrc文件并更新plugins=行以包含kubectl插件。

source <(kubectl completion zsh)

 

结论

经过上面的步骤,我们已经在Ubuntu 18.04 LTS服务器上成功部署了3节点Kubernetes集群。

 

相关主题

采用Weave实现Docker多宿主机互联的目的

精选文章
热门文章