

使用kubeadm安装基于虚拟主机的Kubernetes 集群
source link: http://dockone.io/article/1448843
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

使用kubeadm安装基于虚拟主机的Kubernetes 集群
Kubernetes是当下一个非常流行的容器调度工具,很多组织都在使用它。它是一个由云原生基金会(Cloud Native Computing Foundation)管理的开源软件。我们当中绝大多数人应该都知道如何安装和使用Kubernetes,典型的Kubernetes架构如下图:
用户可以使用Minikube,Kind和Microk8s在单机的电脑上部署一个单点Kubernetes集群。Katakoda也是一个不错的选择。这些都是一些很容易上手的部署工具。如果有人感兴趣可以去我之前的文章(https://dzone.com/articles/run ... -wind, https://dzone.com/articles/run ... -mini ),里面阐述了如何使用Minikube部署Kubernetes集群并运行Spring Boot。
然而,当谈到部署多点Kubernetes集群时,有些人会觉得不知所措。Playground就是一个不错的选择,这个工具可以帮助你创建一个多点集群,并在线4个小时。虽然大部分创建的过程都是抽象的,但是我们还是能从中得到一些体验的。如果希望在学习Kubernetes集群时,有一个比较稳定的实验环境,可以选择一些公有云的产品,例如AWS的EKS,VMWare的Tanzu,Redhat的OpenShift或者Google的GKE。这些产品一般都会提供一段时间的试用期,或者一些初始使用的免费额度,这能让一些程序员先属性一下整个环境先,然后再考虑付费的事。但是,对自学的人来说,成本还是比较高的。
因此,对于这样一类人群,我觉得通过发布这篇文章,应该能给他们提供一些帮助,帮助他们在自己的电脑上安装配置一套多节点的基于虚拟主机Kubernetes集群。整个流程是:先创建一个VM给Master节点,一个VM给Worker节点,然后初始化集群,在集群上部署工作负载,最后在集群外访问这些工作负载。下面是详细步骤。
需要创建集群的个人电脑至少有100G硬盘空间,16GB内存。 上面曾经提到的VM的最低配置如下:1个Master Node (15GB 硬盘和5GB内存),1个Worker Node (15GB 硬盘和4GB内存)。如果想添加更多的VM节点,电脑的资源又比较紧张,也可以尝试把硬盘降到10GB,内存降到3GB。
电脑上还需要安装两个软件,一个是Oracle的Virtual Box,安装文档在此可以找到。Virtual Box 作为整个环境的hypervisor层。另一个是VM的镜像,我们可以使用Ubuntu的镜像,可以在此下载20.04版本。
这两个是进行下一步的必要条件。
安装Master节点
这一步我们需要在Virtual Box中创建一个Master节点虚机。打开Virtual Box,按CTRL+N或者在菜单栏选择Machine->NEW。输入VM的名字作为Master,Type是Linux,版本为Ubuntu(64-bit)。下图作为参考。下一步选择内存的大小,一般最低2048MB。 下图作为参考。
下一步,选择如下图所示的“Create a virtual hard disk now”。
再下一步,选择硬盘的类型为VDI,如图:
这里,选择硬盘尺寸为Fixed Size,如图:
最后,硬盘的尺寸我们设定为15GB,如图:
到这里,新建的VM应该在Virtual Box里已经可以显示出来了。再把下载好的Ubuntu ISO镜像文件添加上去。下面再设置网络和CPU。
添加镜像,选中VM,选择Settings->System->Processor,数量设定为3。如图:
然后,单击Storage Option来设定镜像。 选择Storage->Controller:IDE->Empty,再点击蓝色CD图标,下一步去IDE:Secondary Master,然后选择Choose/Create a Virtual Optical Disk,选择Ubuntu.iso的文件路径。如图:
下一步我们需要配置VM的网络,我们得设置两个网卡。第一个网卡配置为桥接网络(bridged network adapter)这样可以使虚机可以访问外部网络。
第二个网卡设置为仅主机的类型(Host-only adapter),这样能使虚机和主机之间可以互相访问。
当这些都配置完,按下OK即可以了。到这里,虚机的硬件部分就完成了。下一步我们开始安装Ubuntu操作系统以及创建用户名密码。在VirtualBox选中这个虚机,按下开始按钮。随后即进入Try Ubuntu和Install Ubuntu的图形界面。选中Install Ubuntu,进入下面的安装向导界面。
选择最小化安装(Minimal Installation option),后面根据个人所需,再选择比较合适的选项。其中一步是创建用户名密码,输入虚机的主机名,用户名为master,密码和设置为master,当然你也可以自定义这个密码。随后就进入安装过程,最后安装完成重启即可。
下一步在master节点创建一些目录,然后安装Docker(容器引擎),kubeadm,kubelet以及kubectl(Kubernetes 客户端)。所有这些都需要在super user的模式下进行。打开一个终端然后再运行下面的命令就可以直接完成上面的步骤。当然,如有需要,可以参考Kubernetes有关运行时和kubead的官方文档。
sudo su #[Press Enter and provide the root user password]
mkdir -p /etc/apt/trusted.gpd.d
touch /etc/apt/trusted.gpd.d/docker.gpg
##Install Docker Repository
sudo apt-get update && sudo apt-get install -y \
apt-transport-https ca-certificates curl software-properties-common gnupg2
##Install Repository Key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key --keyring
/etc/apt/trusted.gpg.d/docker.gpg add -
##Install the apt Repository
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
Stable"
##Install the Docker Container Engine
sudo apt-get update && sudo apt-get install -y \
containerd.io=1.2.13-2 \
docker-ce=5:19.03.11~3-0~ubuntu-$(lsb_release -cs) \
docker-ce-cli=5:19.03.11~3-0~ubuntu-$(lsb_release -cs)
##Set up Docker Daemon
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
echo ‘alias k=kubectl’ >> ~/.bashrc
echo ‘swapoff -a’ >> ~/.bashrc
安装完Docker,我们就可以安装kubeadm,kubelet和kubectl。在super user模式下,运行下面的命令。
sudo su [Enter the root password]
##iptable set up
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl –system
## Setting up the tools
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
##kubelet restart
systemctl daemon-reload
systemctl restart kubelet
##Install Net tools
apt install net-tools
到这里,Docker,kubeadm,kubelet和kubectl已经安装完成。Master和Worker节点需要再创建一些目录。当然也需要在su模式下,命令行如下:
sudo su
mkdir -p /var/lib/calico
touch /var/lib/calico/nodename
mkdir -p /var/run/bird
touch /var/run/bird/bird.ctl
Master节点完成,现在开始配置Worker节点。
配置Worker节点
Master节点全部做完,关掉虚机。我们可以直接使用Master去创建Worker节点,这样就不需要从头一步一步的创建Worker虚机。方法就是直接clone。选中master VM,按CTRL+0直接打开clone的画面,把虚机命名为node01。下一步选择模式为“Hard Clone”,按照向导一步一步操作即可。启动虚机,用户名和密码应该和master的一样。把hostname改成node01,一样需要在终端里并在su模式下运行。
sudo su #[Enter root password]
cat node01 > /etc/hostname
这样就可以把主机名从master改成node01。做完关掉虚机,如果想再加几个worker节点,就可以重复上面的步骤即可。
下一步我们就该在master虚机里创建控制面(control plane)。
创建Control Plane
开启master并登陆。作为创建控制台的一部分,我们需要创建控制台,再初始化单节点的集群。首先得部署一个基于容器网络接口(Container Network Interface CNI)的Pod网络插件,这样Pod之间才能互相沟通。因此,我们先来装一个Calico Pod网络。先来看一下主机的IP地址,Linux下运行“ifconfig”即可,记录一下“192.168.xx.xx”,虚机的网络应该也是同一个网段的。再打开Linux终端,在su模式下运行下面的命令:
sudo su [Enter root password]
ifconfig [It will give you a list of ip addresses, note down the address which is of the pattern
192.168.x.xxx. That is the ip address of the VM]
kubeadm config images pull
kubeadm init –apiserver-advertise-address= --pod-network-cidr=192.168.0.0/16 [Copy the last part of the output. That would be used by worker nodes to join the master node]
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
##Install the pod network calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl get nodes -w [This will provide details about the master node only]
## Currently no workload could be scheduled on the master node. We need to remove the taint on the master node to schedule pods on it
kubectl taint nodes --all node-role.kubernetes.io/master-
最后一步的kubeadm join会输出类似的信息“kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>”,复制这段命令,因为我们在worker node加入控制台的时候要用到。
Worker节点加入Master
开启worker节点的虚机,用linux 终端登陆并在su模式下运行:sudo su [Enter root password]
##Enter the kubeadm join command copied from the master node vm which would of below pattern
kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
这样worker节点应该就能加入控制台了,Pod也应该可以在这些worker节点上编排运行了。如果还有其他节点,重复上面的步骤就可以了。
部署和发布工作负载
首先su的模式下,master节点上运行下面的命令验证一下集群的状态。sudo su
kubectl get nodes -o wide
输出的信息应该是类似这样的:
如果所有的节点都是正常的,那么状态就是Ready,如果有NotReady的,需要再等几分钟。记录下每个节点的Internal-IP,因为访问Pod的时候我们需要用到。现在,我们需要运行下面的命令行去创建namespace(名称空间),一个deployment(部署)和一个service(服务)来发布这个 deployment,同时从集群外访问这个应用。
##Create namespace called alpha
kubectl create namespace alpha
kubectl config set-context –current –namespace alpha
##Create deployment called pages
kubectl apply -f https://raw.githubusercontent.com/aditya-bhuyan/kube-ws-configs/master/YAML/probe/log-persistent-volumes.yml
##Create a NodePort service to expose the deployment
kubectl expose deploy pages –type=Nodeport –port=8080
##Verify all objects are created
kubectl get all
##Verify the service
kubectl get service pages
最后一个命令会输出service的Port信息。记下这个端口号,应该在30000-32767之间。因此,我们应该是可以使用url http://<worker节点的internal-IP>:<node-port>就可以访问这个应用了。所以,在浏览器里打开这个url试试吧。
如果都成功了,那么恭喜你,你刚刚已经部署一个多节点的Kubernetes集群并成功部署了一个工作负载了。
上面的场景,在主机环境下可以做各种实验,但是有一个限制,就是你无法从主机外的环境下访问这个集群。但从学习和实验的角度来说,已经足够了。所有的Kubernetes集群的特性都有,同时在你主机的硬件性能可以支撑的前提下,集群的扩容和缩容都可以实现。
最后,祝愿大家玩的开心!
原文链接:How to set up a bare metal Kubernetes cluster using kubeadm(翻译:伊海峰)
Recommend
-
31
kubeadm安装k8s集群1.17版本一、安装要求:满足以下条件一台或多台机器,操作系统CentOS7.x-86_x64硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多集群中所有机器之间网络互通可以访问外网,需要拉取镜像禁止swap分区说在前面的话,kubeadm是k8s官方推出...
-
11
上一篇文章《Kubernetes安装篇(上):基于Minikube方式部署本地环境》介绍了基于本地环境下的 Kubernetes 安装,目的在于搭建本地开发环境。但在实际生产环境中,Kubernetes
-
7
使用kubeadm部署高可用kubernetes集群 | MKing's Blog 使用kubeadm部署高可用kubernetes集群 ...
-
15
使用 kubeadm 搭建 v1.15.3 版本 Kubernetes 集群-阳明的博客|Kubernetes|Istio|Prometheus|Python|Golang|云原生 https://unsplash.com/photos/nfxD5dWy1wk 以前文章和视频中都是
-
7
使用 kubeadm 创建一个 kubernetes 集群 发表于 2017-12-17 更新于 2021-12-02 分类于 kubernetes 阅读次数:960 Disqus: 本文字数: 4.2k 阅读时长 ≈ 8 分钟
-
7
kubeadm安装HA集群 March 20, 2019 in kubeadm,
-
7
使用kubeadm部署Kubernetes 1.18.0 集群实践记录 kubeadm Kubeadm是一种工具,旨在为创建Kubernetes集群提供最佳实践的“快速路径”,它以用户友好的方式执行必要的操作,以使可以最低限度的可行,安全的启动...
-
13
这份分步指南将向你展示如何使用 Kubeadm 工具在 Debian 11 上安装 Kubernetes 集群。Kubernetes(k8s...
-
8
一、安装环境 [root@master1 ~]# cat /etc/redhat-releaseCentOS Linux release 7.9.2009 (Core)[root@master1 ~]# uname -aLinux master1 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2...
-
4
CentOS7 / Debian10 使用 kubeadm 安装 Kubernetes (k8s) 1.27.2 (一控制节点+多工作节点) 2023/06/15 Linux Docker Kubernetes 官方文档:
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK