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集群内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • virtualbox中ubuntu和windows共享文件夹设置教程

    本文介绍了virtualbox中ubuntu和windows共享文件夹设置,具体如下: 系统平台:win8.1.virtualbox4.3.8.ubuntu12.04 1.安装VBoxGuestAdditions_4.3.8.iso增强工具,安装完毕后根据提示重启Ubuntu,具体操作如下: a.把VBoxGuestAdditions_4.3.8.iso镜像到Ubuntu中,存放在Ubuntu的/media目录中,操作如下: b.安装virtualbox增强包 linjiqin@ubuntu:~

  • VirtualBox安装Ubuntu Server16.04虚拟机的图文教程

    1.新建虚拟机 VirtualBox点击新建,选择Linux Ubuntu 虚拟硬盘类型选择VHD(虚拟硬盘) 动态分配 选择好保存位置和硬盘大小,创建. 2.安装系统 选择"存储"--"控制器",加载Ubuntu Server光盘镜像 选择好后启动. 选英文 位置信息,选择other--Asia--China 系统语言和键盘设置 选English(US) 设置计算机名 用户名,密码 是否使用弱密码,是 是否加密,否 时区是否正确 磁盘分区,默认就行 网络代理 是否

  • 解决VirtualBox中Ubuntu 14.04屏幕分辨率不能设置的问题

    在VirtualBOx虚拟机中Ubuntu 14.04设置屏幕分辨率,怎么点都没反应. 方法一:安装与你的Ubuntu-Guest版本最接近的VirtualBox Guest Additions版本, 如下: sudo apt-get install virtualbox-guest-dkms •1 •1 安装完所需要的包后,重启VirtualBox,便可以以合适的分辨率显示. 如果运行的是MAC OSX,使用以下命令修复: sudo apt-get remove libcheese-gtk23

  • Virtualbox安装Lubuntu 18.04 64位的图文教程

    前言 Lubuntu(发音:宽式IPA:/luːˈbuːntuː/)是新的Ubuntu Linux桌面系统计划,其默认桌面环境为LXDE,特别适用于配备老旧的电脑.和Xubuntu.Ubuntu Lite一样,都是属于追求轻巧的Ubuntu分支.其特色除了轻巧快速外,并提供极低的包相依性,将因为包相依造成的操作问题减到最低.另外,与其他分支相比Lubuntu与Ubuntu除了桌面环境和预装软件不同外,其他基本一致.因此,能在配置较低的电脑上体验到Ubuntu的操作,二者的软件安装方式基本一致,L

  • ubuntu 下VirtualBox 如何实现共享设置

    ubuntu 下VirtualBox 实现共享设置: 使用系统VirtualBox,另外又装个Ubuntu  ,想让两个系统实现共享设置,经过上网查资料,得以实现,这里就说下具体步骤: 一.VirtualBox在winxp下虚拟ubuntu 在winxp下虚拟ubuntu,在ubuntu下访问win的共享文件夹时出现如下错误: /sbin/mount.vboxsf: mounting failed with the error: No such device 1,若要使用共享文件夹功能,必须安装

  • Ubuntu系统中部署Vagrant和VirtualBox的图文教程

    一.前言 1.Vagrant是一个搭建完整的虚拟开发环境的工具 2.实验环境 在Win10中利用VMWare Workstation创建一台Ubuntu虚拟机,版本为64位Ubuntu Desktop 16.04,4核,4G内存:然后在Ubuntu中安装Vagrant和VirtualBox,所用到的Vagrant和VirtualBox版本都是截至2018/04/08时候的最新版. 之所以使用VMWare Workstation来创建Ubuntu的虚拟机而不是VirtualBox,跟下面即将说到的

  • Windows系统下安装VirtualBox及安装Ubuntu16.04的详细教程

    1.软件介绍 VirtualBox VirtualBox 是一款免费的开源虚拟机软件,所谓虚拟机软件,就是能够提供各种模拟的硬件环境,并且在其上安装各种操作系统,目前支持Window,Linux,Mac OS X. 其下载地址可以点击这里.点击链接后,因为是要在window下安装,可以参考下面,直接点击红框部分的链接下载widnow版的VirtualBox 下载好了后,直接双击打开,类似下面的图文步骤直接不停点击下一步安装即可 Ubuntu Ubuntu,中文称呼"乌班图",是一个开源

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

    Kubernetes 运维之路 的开始当然少不了集群环境的搭建,这篇文章记录了我在一台机器使用 VirtualBox + Ubuntu 16 搭建 Kubernetes 的整个过程,包括其中遇到的一些问题以及解决办法. 关于 Kubernetes 下面是一段来自维基百科的关于 Kubernetes 的解释: Kubernetes(常简称为 K8s)是用于自动部署.扩展和管理「容器化(containerized)应用程序」的开源系统.该系统由 Google 设计并捐赠给 Cloud Native

  • Minikube搭建Kubernetes集群

    Minikube 打开 https://github.com/kubernetes/minikube/releases/tag/v1.19.0 下载最新版本的二进制软件包(deb.rpm包),再使用 apt 或 yum 安装. 或者直接下载 minikube 最新版本二进制文件(推荐). curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.19.0/minikube-linu

  • 在Kubernetes集群中搭建Istio微服务网格的过程详解

    目录 1.使用sealos部署快速部署K8S集群 1.1.基本环境配置 1.2.部署K8S集群 2.在K8S集群中部署Istio网格服务 2.1.下载Istio安装包 2.2.查看Istio可用的配置列表 2.3.展示Istio配置档的配置信息 2.4.查看Istio在k8s集群部署使用的YAML文件内容 1.使用sealos部署快速部署K8S集群 1.1.基本环境配置 1.设置主机名 hostnamectl set-hostname k8s-master hostnamectl set-hos

  • kubernetes集群搭建Zabbix监控平台的详细过程

    目录 一.zabbix介绍 1.zabbix简介 2.zabbix特点 3.zabbix的主要功能 4.zabbix架构图 二.检查本地k8s环境 1.检查系统pod运行状态 2.检查node节点状态 三.配置nfs共享存储 1.安装nfs 2.创建共享目录 3.配置共享目录 4.启动相关服务 5.使配置生效 6.查看nfs 7.其他节点检查nfs共享 四.安装zabbix-mysql 1.编写zabbix-mysql的yaml文件 2.创建命名空间 3.创建zabbix数据库 4.检查pod状

  • 使用Kubeadm在CentOS7.2上部署Kubernetes集群的方法

    本文参考kubernetes官网文章Installing Kubernetes on Linux with kubeadm在CentOS7.2使用Kubeadm部署Kuebernetes集群,解决了一些在按照该文档部署时遇到的问题. 操作系统版本 # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 内核版本 # uname -r 3.10.0-327.el7.x86_64 集群节点 192.168.120.122 kube

  • Kubernetes集群环境初始化

    概念 k8s/kubernetes容器化部署解决容器编排问题,kubernetes为容器编排软件的佼佼者kubernets为一组服务器集群 功能 自我修复 一个容器崩溃,另一个容器起来弹性伸缩 根据需要调整容器数量服务发现 自动发现的形式找到所需依赖负载均衡 一起分担流量版本回退 新版本有问题,立马回退到原来的版本存储编排 可以根据容器自身的需求自动创建存储卷.... k8s组件 k8s为控制节点 和 工作节点组成.master节点的组件负责集群的管理ApiServer:资源操作的唯一路口 接受

  • 使用sealos快速搭建K8s集群环境的过程

    目录 一.前言 二.sealos 三.准备环境 sealos 安装 虚拟机设置 网络 windows网络 虚拟机的网络 网卡配置 其他配置 RPM 源 四.安装开始 五.可能遇见的问题 sealos run的时候镜像下载缓慢 六.安装测试 安装Kubernetes Dashboard 一.前言 最近在做谷粒商城项目,搞到k8s了,但是跟这老师的方法一步一步做还是搭建不起来. 我不断的试错啊,各种bug都遇见了一个也没解决我真是啊哭死! 二.sealos 直到遇见一个大佬同学,告诉我sealos几

  • 详解docker搭建redis集群的环境搭建

    本文介绍了docker搭建redis集群的环境搭建,分享给大家,废话不多说,具体如下: 下载镜像 docker pull redis 准备配置文件 mkdir /home/docker/redis/ wget https://raw.githubusercontent.com/antirez/redis/3.0/redis.conf -O /home/docker/redis/redis.conf cd /home/docker/redis/ sed -i 's/# slaveof <maste

  • 使用docker快速搭建Spark集群的方法教程

    前言 Spark 是 Berkeley 开发的分布式计算的框架,相对于 Hadoop 来说,Spark 可以缓存中间结果到内存而提高某些需要迭代的计算场景的效率,目前收到广泛关注.下面来一起看看使用docker快速搭建Spark集群的方法教程. 适用人群 正在使用spark的开发者 正在学习docker或者spark的开发者 准备工作 安装docker (可选)下载java和spark with hadoop Spark集群 Spark运行时架构图 如上图: Spark集群由以下两个部分组成 集

  • ubuntu docker搭建Hadoop集群环境的方法

    spark要配合Hadoop的hdfs使用,然而Hadoop的特点就是分布式,在一台主机上搭建集群有点困难,百度后发现可以使用docker构建搭建,于是开搞: github项目:https://github.com/kiwenlau/hadoop-cluster-docker 参考文章://www.jb51.net/article/109698.htm docker安装 文章中安装的是docker.io 但是我推荐安装docker-ce,docker.io版本太老了,步骤如下: 1.国际惯例更新

随机推荐