VirtualBox+Ubuntu16搭建Kubernetes集群的实现
作者:K8sCat 发布时间:2021-02-21 23:16:15
目录
关于 Kubernetes
基础环境准备
安装 VirtualBox
下载 Ubuntu 16 系统镜像
虚拟机 x3
虚拟机 IP
配置主机名
SSH 无密连接
Kubernetes 集群搭建
安装 Docker
安装 kubeadm、kubelet 和 kubectl
关闭 SWAP
预先下载镜像
初始化 master 节点
加入 node 节点
分发 kubectl 配置文件
安装网络插件
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
来源:https://juejin.cn/post/6970710333027516423
猜你喜欢
- 到年底了,不知不觉过的太快了,最近俺的几个网站受到了机房的严重警告,让我意想不到的是,机房那面竟然说我的网站被挂马了,网站流量总是不断的往外
- 这篇笔记是一篇安装教程,没有什么实际的意义,仅为了记录一下……距离上次弄这东西不知道多长时间了,以至于这次再次使用时很是生疏,于是就想着把过
- Google帐户会默认绑定一个邮箱地址作为主关联邮箱,用户可直接用邮箱信息(比如邮箱地址、密码)登录Google的各种产品及服务。而现在,G
- 今天在浏览一个博客时,突然看到一句话“成功就是不断重复地做简单的事”,不禁让我联想起咱们做站何尝不是这样:记得刚开始做站的时候,总是不停地到
- 一、软件的安装和卸载 1、安装前的准备(1)下载地址:http://gt.onlinedown.net/down/md600g_en.exe
- 很久没更新了,今天(12月11日)新增三个网摘代码,分别是飞豆、抓虾、鲜果,这些都是著名的网摘网站。你可以在此篇文章最后看到新增的网摘代码。
- 从前两天开始,无数MSN用户在登录时,莫名其妙地吃到闭门羹。记者了解到,微软近期正在全国范围内启动大规模强制升级,用户若不按要求点“是”同意
- 因为喜欢PHP和开源所以喜欢上DEDECMS,但是因为技术有限所以用起来遇到很多的困难而又没人帮忙,只能自己摸索加向朋友提问,从中也体会到做
- 先说今天遇到的一个问题,我在wordpress模板目录下新建了一个PHP文件,service.php,想要调用<?php get_fo
- 一、虚拟机设置 共享文件夹:1、选择待处理虚拟机,右键设置(或者在点开虚拟机时,选择编辑虚拟机设置);2、在虚拟机设置窗口:选择选项--》点
- 先说说的自己情况。和许多从学校里出来的学生一样,毕业后的迷惘一度让我很悲观,学校可以学到很多知识,但我学到的东西却不足以在这个社会立足。经过
- 终于,在无数充满渴望的视频制作者眼光中,在国内无数视频站饥寒交迫的等待中,在中小站长两眼发光的期待中,Google终于发布了新的AdSens
- 服务器数据存储安全是保障服务器正常运行的重要的环节,同时也是企业网络信息化建设的核心。每一家企业的管理层人员都非常重视存储在服务器的重要数据
- 文件:include/inc_function.php 系统默认会载入此文件 GetCurUrl() 获得当前的脚本的URL GetAlab
- && 与 || 配合eg:cat test.sh #!/bin/bash[ -e /etc/hosts ] &&am
- 个人网站,通常意义上说是以个人的名义,单个人或几个人小作坊做的网站,也从另外的诠释上泛指草根网站。个人网站不缺创意,不缺流量,不缺技术,不缺
- 某学校计算机中心机房共有计算机240台,已互连为局域网,希望访问校内资源时通过校园网接口,而访问外部资源时通过ADSL接口。 Windows
- 前一段时间博主在VMware虚拟机上安装了Ubuntu系统,如果还没有安装的同学可以参考博主上一篇文章:VMware Ubuntu安装详细过
- 如果想为WP找一个相册插件,我想NextGEN Gallery最适合了,我觉得这是我用过的最好的WP插件之一,功能很强大,提供了很完美的照片
- 近日,知名影星徐静蕾联手VANCL(凡客诚品)推出开啦饰品、进军B2C的消息,在业界颇受关注。今天记者从VANCL了解到,9号上线的徐静蕾开