如何搭建socks5和ss节点_简单的 Kubernetes 集群搭建

本文详细介绍了如何使用Kubeadm搭建一个单Master双子节点的Kubernetes集群,包括环境配置、基础组件安装、Flannel组网、添加子节点、验证集群状态以及搭建Kubernetes Dashboard并免权限认证。适用于开发环境的快速部署,方便管理和监控。
摘要由CSDN通过智能技术生成

fc7a06050c7206ecadffc07e8854a785.png

本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2018年10月03日 统计字数: 28480字 阅读时间: 57分钟阅读 本文链接: https://soulteary.com/2018/10/03/how-to-get-your-k8s-cluster.html


简单的 Kubernetes 集群搭建

一直以来因为机器资源捉襟见肘,使用 GitLab CI 配合 compose 完成了多数自动化构建和部署的事情,但是随着运行服务越来越多,管理一大堆 docker-compose.yml 和服务的成本也变的越来越高。

作为一个懒人,购置了一台顶配的 ELite Desk G4 800 来作为资源,计划搭建 K8S 配合 GitLab 的 Auto DevOps 作为接下来使用的方案。

网上关于 K8S 的搭建使用有很多,但是多数都是基于 CentOS、二进制包的教程,太过陈旧和麻烦。

而且在操作过程中,基本都是一路 Next,缺少调试验证,本篇以一个 K8S 新手视角,介绍如何快速搭建一套开发可用的 mini 集群。

我这里计划创建一个单 Master 双子节点的集群。

官方工具箱 Kubeadm

Kubeadm 作为官方推出的 K8S 工具箱,旨在协助开发者能够快速 搭建使用 Kubernetes 的各种核心功能,包括: - 配置并启动 master 节点 - 配置并启动 worker 节点,并加入 master 节点,组成集群 - 升级集群到最新版本 - 管理你的集群的详细配置 - 管理你的集群 token - …

想要了解更多,可以查看官方文档 。

为了简化操作和维护成本,本次集群的搭建就使用它来进行。不过相比较手动配置的灵活,kubeadm 目前存在一些限制,比如它仅支持部分版本的操作系统,参考官方文档:开始安装 kubeadm 之前。

而且每台主机或者虚拟机至少要分配 2核心2GB 的内存。

我这里使用的资源是三台 2核心4GB 的虚拟机,操作系统为 ubuntu ,为了使用 docker 官方的软件包,我将系统版本选择为 16.04

我在这里对这三台机器分别进行了命名和固定IP分配:

  • (Master Node) potato 10.11.12.180
  • (Worker Node) potato-chips 10.11.12.181
  • (Worker Node) potato-salad 10.11.12.182

配置基础环境

在开始搭建集群之前,我们需要先进行一些基础环境的配置。

SSH 认证授信

接下来的操作,包含大量的 ssh 操作,为了避免麻烦,可以将你的用户秘钥添加到远程主机中。

ssh-copy-id -i ~/.ssh/YOUR_KEY.pub YOUR_HOST_NAME_OR_HOST_IP

完全关闭SWAP交换分区

网上的教程一般都只会引导用户使用 swapoff 命令进行分区关闭,但是一旦主机重启,这个命令的作用就“失效”了,所以这里建议使用我下面提供的命令一劳永逸的完全关闭 swap 分区。

sudo swapoff -a
cat /etc/fstab | grep -v '^#' | grep -v 'swap' | sudo tee /etc/fstab

配置主机名称和基础解析

在建设集群之前,我们需要确保节点之间的以下要素不同:

  • 系统主机名不同
  • 硬件 product_id
  • 网卡 MAC地址

我们先设置主机名,比如设置主机名为 potato

sudo hostnamectl set-hostname potato

设置完主机名称之后,我们需要将主机名称对应的基础解析指向本地。

echo "127.0.0.1 `hostname`" | sudo tee -a /etc/hosts

至于 MAC 地址,你可以直接使用 ifconfig 进行设置,也可以修改 /etc/network/interfaces 进行设置。如果你也是虚拟机用户,我建议直接在硬件层面进行设置,一劳永逸,另外,如果你在硬件层面设置了 MAC 地址,product_id 也会随之变化。

提了这么多次 product_id ,那么该如何查看它的内容呢,很简单:

sudo cat /sys/class/dmi/id/product_uuid

安装docker

在安装 K8S 和各种 K8S TOOLBOX 之前,我们需要先对系统进行一些基础配置,在之前的文章中,我有介绍过如何更优雅的安装 docker

但是这里稍稍有一些不同:这里必须使用指定版本的 docker-ce ,目前 18.0x 的 docker-ce 暂时未通过 K8S 测试验证,不能被直接使用。

之前的安装命令 apt install docker-ce 需要被替换为下面的命令来进行指定版本的软件安装:

apt-get update && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk '{print $3}')

为了避免软件在后续维护系统的过程中被误升级,我们可以锁定它的版本:

apt-mark docker-ce

加速 docker-ce 的下载和安装

如果你觉得从官方下载 docker-ce 比较慢,可以在添加了 gpg 秘钥后,将添加软件仓库地址从官方源改为其他镜像源,比如使用下面的命令添加一个新的软件源:

add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

然后执行前面说到的安装命令,进行更快速的安装。

安装 Kubeadm、Kubectl、Kubelet

这里参考了部分官方文档 Creating a single master cluster with kubeadm ,但是请注意,目前官方已经关闭了 v1 版本的 docker 仓库的接口,所以如果你准备挂代理直接下载软件镜像包,需要修改 /etc/docker/daemon.json,强制停用 v1 版本的 API:

{
  "disable-legacy-registry": true
}

由于 K8S 搭建之后,升级不是很频繁,可以直接使用导入离线的软件包,进行快速的服务搭建和升级,而对机器上的 docker 配置做到使用默认配置不进行改动。

获取镜像并导出为离线镜像包

我们这里使用到的软件包镜像名称列表如下:

k8s.gcr.io/kube-apiserver-amd64:v1.11.3
k8s.gcr.io/kube-controller-manager-amd64:v1.11.3
k8s.gcr.io/kube-scheduler-amd64:v1.11.3
k8s.gcr.io/kube-proxy-amd64:v1.11.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd-amd64:3.2.18
k8s.gcr.io/coredns:1.1.3
k8s.gcr.io/kubernetes-dashboard-amd64:v0.10.0

quay.io/coreos/flannel:v0.10.0-amd64

将列表保存为文件,在可以获取镜像的云机器上,使用下面的命令可以自动将镜像下载并进行导出。

PACKAGES=`cat ./images/11.txt`;

for package in $PACKAGES; do docker pull "$package"; done

docker images | tail -n +2 | grep -v "<none>" | awk '{printf("%s:%sn", $1, $2)}' | while read IMAGE; do
    echo "find image: $IMAGE"
    filename="$(echo $IMAGE| tr ':' '-' | tr '/' '-').tar"
    echo "save as $filename"
    docker save ${IMAGE} -o $filename
done

然后将下载并导出的 *.tar 镜像包下载到要搭建集群的机器上,使用下面的命令即可批量导入镜像到系统,避免了要为集群机器配置代理等操作。

ls *.tar | xargs -I {} docker load -i {}

上面的脚本,我保存在了 GitHub : soulteary/k8s-images-trans-helper 。

加载 IPVS 内核模块

为了避免 IPVS 内核模块没有加载,而报 RequiredIPVSKernelModulesAvailable 的错误,我们使用下面的命令加载所有支持的 IPVS 模块。

lsmod | grep ^ip_vs | awk '{print $1}' | xargs -I {} modprobe {}

安装 K8S 环境

安装依赖工具、添加 GPG 秘钥、添加软件仓库,进行软件下载:

apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

上面的命令是官方文档提供的,实际上你可能会遇到添加 GPG 秘钥出错的情况,并且使用官方源进行下载失败的情况,为此我为你准备了一套适合国内环境使用的命令。

apt-get update && apt-get install -y apt-transport-https curl
cat google-apt-key.gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-$(lsb_release -cs) main"
apt update && apt install -y kubelet kubeadm kubectl

这里的 GPG 秘钥可以和离线镜像包一样,使用云主机下载下来,放置于你执行命令的目录,然后使用 cat 命令读取内容,再使用 apt-key 进行添加操作。

和配置 docker 一样,我们需要锁定软件版本,避免“意外”的出现。

apt-mark hold kubelet kubeadm kubectl

如果你网速够快,1分钟之内,你的 K8S 软件包就都就绪了,接下来就能够进行集群的搭建了。

搭建集群

登录服务器,使用 kubeadm init 命令进行 master 节点的初始化,因为我选择使用 flannel 作为组网工具,所以我在初始化命令后面添加了 CIDR 参数。

kubeadm init --apiserver-advertise-address=10.11.12.180 --pod-network-cidr=10.244.0.0/16

启动 Master 节点

这里偷个懒,直接使用 root 用户启动程序&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值