本文带你完成在Ubuntu 18.04操作系统上安装和设置工作3节点Kubernetes Cluster的步骤。
Ubuntu 18.04上的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
设置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: 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部署 让我们创建测试窗格以确认我们的集群正在按预期运行:
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
你可以看到我们有实时的http-app部署。 创建部署后,我们可以使用kubectl创建一个服务,该服务在特定端口上公开Pod,另一种方法是使用YAML定义Service对象,以下是我们的服务定义: $ cat http-app-service.yml
使用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
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集群。
相关主题 |