纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

VirtualBox+Ubuntu16搭建Kubernetes集群 VirtualBox+Ubuntu16搭建Kubernetes集群的实现

K8sCat   2021-06-09 我要评论
想了解VirtualBox+Ubuntu16搭建Kubernetes集群的实现的相关内容吗K8sCat在本文为您仔细讲解VirtualBox+Ubuntu16搭建Kubernetes集群的相关知识和一些Code实例欢迎阅读和指正我们先划重点:VirtualBox+Ubuntu16搭建Kubernetes,VirtualBox,Ubuntu16,Kubernetes下面大家一起来学习吧

Kubernetes 运维之路 的开始当然少不了集群环境的搭建这篇文章记录了我在一台机器使用 VirtualBox + Ubuntu 16 搭建 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 找到每台虚拟机对应的内网地址:

> ifconfig

enp0s3    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/hosts
10.0.2.4 master
10.0.2.5 node1
10.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_keys
chmod 400 ~/.ssh/authorized_keys

配置完成后我们将可以通过以下方式在其中一个虚拟机上连接另一台虚拟机了:

# 在 master 节点上
ssh root@node1

Kubernetes 集群搭建

在弄好三台虚拟机后我们便可以开始搭建一个拥有三个节点的 Kubernetes 的集群了

安装 Docker

apt-get update -y
apt-get install -y \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg \
  lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  "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 ENGINE
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io

# Configure Docker to start on boot
systemctl enable docker.service
systemctl enable containerd.service

# Start Docker
systemctl start docker

安装 kubeadm、kubelet 和 kubectl

这里使用的是阿里云的镜像源:

# 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包
apt-get update -y
apt-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.gpg
curl 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.list
echo "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 -y
apt-get install -y kubelet kubeadm kubectl
apt-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 list

k8s.gcr.io/kube-apiserver:v1.21.1
k8s.gcr.io/kube-controller-manager:v1.21.1
k8s.gcr.io/kube-scheduler:v1.21.1
k8s.gcr.io/kube-proxy:v1.21.1
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0

k8s 的镜像源对于国内用户是可望而不可即的但我们可以先拉到国内的镜像仓或者可以使用的镜像仓比如阿里云的容器镜像服务 ACR 和 Docker 的官方镜像仓 DockerHub

我们可以新建一个 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 registry
kubeadm 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 images
docker 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 -x
docker tag k8s.gcr.io/coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0

# Remove images
docker 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/20

kubeadm 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.conf
echo 'export KUBECONFIG="/etc/kubernetes/admin.conf"' >> /etc/profile
source /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_RANGE
kubectl apply -f https://gist.githubusercontent.com/k8scat/c6a1aa5a1bdcb8c220368dd2db69bedf/raw/da1410eea6771c56e93f191df82206be8e722112/k8s-weave-net.yaml

到此这篇关于VirtualBox+Ubuntu16搭建Kubernetes集群的实现的文章就介绍到这了,更多相关VirtualBox+Ubuntu16搭建Kubernetes集群内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! 


相关文章

猜您喜欢

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式