Ubuntu怎么搭建Kubernetes集群
这篇文章主要介绍“Ubuntu怎么搭建Kubernetes集群”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Ubuntu怎么搭建Kubernetes集群”文章能帮助大家解决问题。
关于 Kubernetes
下面是一段来自维基百科的关于 Kubernetes 的解释:
Kubernetes(常简称为 K8s)是用于自动部署、扩展和管理「容器化(containerized)应用程序」的开源系统。该系统由 Google 设计并捐赠给 Cloud Native Computing Foundation(今属 Linux 基金会)来使用。
它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具,包括Docker等。
Kubernetes 可以为我们提供 服务发现和负载均衡、存储编排、自动部署和回滚、自动完成装箱计算、自我修复 和 密钥与配置管理 的能力。
基础环境准备
安装 VirtualBox
VirtualBox 是一种功能强大的虚拟机软件,而且是开源免费的,这是下载地址,安装 VirtualBox 非常简单,这里我就不赘述了。
下载 Ubuntu 16 系统镜像
这里我选择了 Ubuntu 16 作为系统镜像,当然你也可以使用其他系统,比如 CentOS 等,Ubuntu 16 的下载地址。
虚拟机 x3
安装好了 VirtualBox,下载了 Ubuntu 16 的镜像后,我们首先需要搭建三台 Ubuntu 16 的虚拟机。这个新建虚拟机的过程也是比较简单的,一步一步往下走就可以了。新建完成后,我们需要对每台虚拟机进行相应的配置,配置时使用的用户应该是 root 用户。
虚拟机 IP
由于我们使用的是虚拟机,我们会给每台虚拟机配置网卡,让每台虚拟机都可以上网的,这里有两种方式:
使用 桥接网卡,每台虚拟机的 IP 将会是宿主机网段的,支持虚拟机上网
使用 NAT 网络 + 端口转发,网段自行设置,支持虚拟机上网
大家可以使用其中任意一种方式给虚拟机配置网卡,从而让虚拟机可以上网。
需要注意的是,在集群搭建完成后,集群中的每个节点的 IP 要求保持不变,否则节点需要重新加入。
简单的方式就是让虚拟机不关机,而是进入睡眠状态,下次只需唤醒即可。
在集群中,我们使用的是内网地址,可以通过 ifconfig 或者 ip addr 找到每台虚拟机对应的内网地址:
> ifconfigenp0s3 Link encap:Ethernet HWaddr 08:00:27:6f:23:2a inet addr:10.0.2.4 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe6f:232a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3277016 errors:0 dropped:0 overruns:0 frame:0 TX packets:3385793 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1084480916 (1.0 GB) TX bytes:2079122979 (2.0 GB)
这台虚拟机(master)的地址就是 10.0.2.4。
配置主机名
Kubernetes 的节点名称是由主机名决定的,所以我们可以分别设置三台虚拟机的主机名为 master、node1 和 node2,通过修改 /etc/hosts 文件来修改主机名,需要重启虚拟机:
# /etc/hosts10.0.2.4 master10.0.2.5 node110.0.2.6 node2
SSH 无密连接
在虚拟机运行起来后,我们要做的第一件事就是要连通这三台虚拟机,即配置 SSH 无密连接。
首先在其中的一台虚拟机上生成 SSH 的公私钥:
ssh-keygen -t rsa -C 'k8scat@gmail.com' -f ~/.ssh/id_rsa -q -N ''
关于 ssh-keygen 的参数说明:
-t rsa 指定加密算法为 RSA
-C 'k8scat@gmail.com' 用于提供一个备注,表明私钥的生成者
-f ~/.ssh/id_rsa 指定私钥生成的位置
-q -N '' 表示不对私钥加密码,以及使用静默的方式
将公私钥分发给另外两台虚拟机,并在三台虚拟机上都将公钥(~/.ssh/id_rsa.pub)的内容写进 ~/.ssh/authorized_keys 文件中,同时设置 ~/.ssh/authorized_keys 文件的权限为 400:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keyschmod 400 ~/.ssh/authorized_keys
配置完成后,我们将可以通过以下方式在其中一个虚拟机上连接另一台虚拟机了:
# 在 master 节点上ssh root@node1
Kubernetes 集群搭建
在弄好三台虚拟机后,我们便可以开始搭建一个拥有三个节点的 Kubernetes 的集群了。
安装 Docker
apt-get update -yapt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-releasecurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# INSTALL DOCKER ENGINEapt-get update -yapt-get install -y docker-ce docker-ce-cli containerd.io# Configure Docker to start on bootsystemctl enable docker.servicesystemctl enable containerd.service# Start Dockersystemctl start docker
安装 kubeadm、kubelet 和 kubectl
这里使用的是阿里云的镜像源:
# 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包apt-get update -yapt-get install -y apt-transport-https ca-certificates curl# 下载 Google Cloud 公开签名秘钥# curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpgcurl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -# 添加 Kubernetes apt 仓库# echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listecho "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list# 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本apt-get update -yapt-get install -y kubelet kubeadm kubectlapt-mark hold kubelet kubeadm kubectl
关闭 SWAP
编辑 /etc/fstab 文件并注释掉 swap 分区的配置:
#/dev/mapper/master--vg-swap_1 none swap sw 0 0
预先下载镜像
获取 kubeadm init 需要使用到的镜像列表:
> kubeadm config images listk8s.gcr.io/kube-apiserver:v1.21.1k8s.gcr.io/kube-controller-manager:v1.21.1k8s.gcr.io/kube-scheduler:v1.21.1k8s.gcr.io/kube-proxy:v1.21.1k8s.gcr.io/pause:3.4.1k8s.gcr.io/etcd:3.4.13-0k8s.gcr.io/coredns/coredns:v1.8.0
k8s 的镜像源对于国内用户是可望而不可即的,但我们可以先拉到国内的镜像仓或者可以使用的镜像仓
我们可以新建一个 GitHub 代码仓,里面只有一个 Dockerfile,其内容如下:
FROM k8s.gcr.io/kube-apiserver:v1.21.0
然后在阿里云的容器镜像服务 ACR 中新建一个镜像,并关联这个 GitHub 代码仓,构建出来的镜像就是我们要的 k8s 镜像,比如上面的 k8s.gcr.io/kube-apiserver:v1.21.1,但在使用的时候需要重新给镜像打标签。
在 ACR 中构建好了所有需要的镜像后,使用下面这个脚本可以快速处理给镜像打标签的任务:
# Pull images from aliyun registrykubeadm config images list | sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#registry.cn-shenzhen.aliyuncs.com/k8scat#g' -e 's#/coredns/coredns#/coredns#g' | sh -x# Tag imagesdocker images | grep k8scat | awk '{print "docker tag",$1":"$2,$1":"$2}' | sed -e 's#registry.cn-shenzhen.aliyuncs.com/k8scat#k8s.gcr.io#2' | sh -xdocker tag k8s.gcr.io/coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0# Remove imagesdocker images | grep k8scat | awk '{print "docker rmi",$1":"$2}' | sh -x
初始化 master 节点
10.0.2.4 是 master 节点的 IP 地址,设置 pod 网段为 192.168.16.0/20:
> kubeadm init --apiserver-advertise-address=10.0.2.4 --pod-network-cidr=192.168.16.0/20kubeadm join 10.0.2.4:6443 --token ioshf8.40n8i0rjsehpigcl \ --discovery-token-ca-cert-hash sha256:085d36848b2ee8ae9032d27a444795bc0e459f54ba043500d19d2c6fb044b065
加入 node 节点
kubeadm join 10.0.2.4:6443 --token ioshf8.40n8i0rjsehpigcl \ --discovery-token-ca-cert-hash sha256:085d36848b2ee8ae9032d27a444795bc0e459f54ba043500d19d2c6fb044b065
分发 kubectl 配置文件
scp master:/etc/kubernetes/admin.conf /etc/kubernetes/admin.confecho 'export KUBECONFIG="/etc/kubernetes/admin.conf"' >> /etc/profilesource /etc/profile
安装网络插件
这里我们使用的是 Weave Net:
# curl -L "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" > weave-net.yaml# With IPALLOC_RANGEkubectl apply -f https://gist.githubusercontent.com/k8scat/c6a1aa5a1bdcb8c220368dd2db69bedf/raw/da1410eea6771c56e93f191df82206be8e722112/k8s-weave-net.yaml
关于“Ubuntu怎么搭建Kubernetes集群”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341