基于Ubuntu18.04环境下的K8S集群快速搭建教程

K8S介绍

Kubernetes这个单词来自于希腊语,含义是 舵手 或 领航员;生产环境级别的容器编排;

  • 按照一定的目的依次排列;
  • 调配、安排;
    Kubernetes,也称为K8S,其中8是代表中间“ubernete”的8个字符,是Google在2014年开源的一个容器编排引擎,用于自动化容器化应用程序的部署、规划、扩展和管理,它将组成应用程序的容器分组为逻辑单元,以便于管理和发现,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效,很多细节都不需要运维人员去进行复杂的手工配置和处理。

K8S Master的作用

k8s集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;
Master Node 由 API Server、Scheduler、ClusterState Store(ETCD 数据库)和 Controller MangerServer 所组成。

K8S Worker的作用

集群工作节点,运行用户业务应用容器;
Nodes节点也叫Worker Node,包含kubelet、kube proxy 和 Pod(Container Runtime)。

资源清单

名称参数
操作系统ubuntu-18.04.5-live-server-amd64 下载链接
处理器2核 CPU
内存2G
硬盘空间40G
虚拟机VM workstation 15
可视化工具Xshell 7

*CKA考试环境为Ubuntu 18.04

环境搭建方式

Kubeadm 是一个提供了 kubeadm init 和 kubeadm join 的工具,作为创建 Kubernetes 集群的 “快捷途径” 的最佳实践。

K8S环境部署准备工作

  • 1:关闭防火墙
  • 2:关闭selinux(ubuntu默认不安装,如果有需要关闭)
  • 3:关闭swap(k8s禁止虚拟内存以提高性能)、
  • 4:hosts添加IP映射关系
  • 5:设置网桥参数
  • 6:时间同步

1:关闭防火墙

ufw disable

2:关闭selinux

Ubuntu默认没有安装selinux,有的话需要关闭
临时关闭,不需要重启机器

apt install selinux-utils
setenforce 0

永久关闭,需要重启机器

vim /etc/sysconfig/selinux
SELINUX=disabled

3:关闭Swap(虚拟内存)

sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
swapoff -a #临时

4:在master添加hosts

cat >> /etc/hosts << EOF
> 192.168.17.155   master
> 192.168.17.147   worker
> EOF

5:设置网桥参数

为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  #生效

6:时间同步

apt-get install ntpdate -y
ntpdate time.windows.com

K8S具体安装步骤

  • 安装docker
  • 修改docker镜像源
  • 安装 kubeadm,kubelet 和 kubectl
  • 部署Kubernetes Master主节点
  • 安装Pod网络通信插件

1:安装docker

Docker官方安装文档

 sudo apt-get update  # 更新源 
 sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release       # 下载docker相关的应用

添加docker GPG密钥

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加稳定的docker镜像仓库

 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
apt-cache madison docker-ce # 查看当前库中的docker版本

image.png

默认下载最新版本的docker

apt-get install docker-ce docker-ce-cli containerd.io

image.png


2:修改docker镜像源

默认的镜像源会从国外拉取,速度非常慢,可以手动修改为国内镜像源,此处使用阿里云docker镜像源

阿里云docker链接

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://rg42iqkp.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker	

image.png


3:安装 kubeadm,kubelet 和 kubectl

添加 K8S 阿里镜像源,默认的镜像源会从谷歌拉取

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF  
apt-get update

kubeadm 不能 帮你安装或者管理 kubelet 或 kubectl,所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 Kubernetes 版本及版本倾斜支持策略

下载安装kubelet,kubeadm,kubectl 查看版本

apt-get install kubelet kubeadm kubectl   # 没有指定,默认安装最新版本
apt-get install kubelet-1.20.3 kubeadm-1.20.3 kubelet-1.20.3 #指定版本
apt list --installed | grep kube  # 查看安装的版本
apt-get remove kubectl kubeadm kubectl  # 删除

image.png

systemctl enable kubelet.service # 自动开启kubelet
  • Kubelet:运行在cluster所有节点上,负责启动POD和容器;
  • Kubeadm:用于初始化cluster的一个工具;
  • Kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件;

最后,需要重启一下系统 reboot


4:部署Kubernetes Master主节点

使用 kubeadm init在Master节点上部署主节点

常用参数说明:

参数名含义
apiserver-advertise-addressAPI 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口,一般使用自己的IP地址
apiserver-bind-portAPI 服务器绑定的端口,默认值:6443
image-repository选择用于拉取控制平面镜像的容器仓库,默认值:"k8s.gcr.io"
kubernetes-version为控制平面选择一个特定的 Kubernetes 版本,默认值:"stable-1"
pod-network-cidr指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs
service-cidr string为服务的虚拟 IP 地址另外指定 IP 地址段,默认值:"10.96.0.0/12"

创建命令

kubeadm init --apiserver-advertise-address=192.168.17.155 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.3 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --v=9

此时docker会从阿里云镜像库中拉取有关的K8S镜像

image.png

创建K8S文件夹

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

5:安装Pod网络插件

使用官方推荐的插件 Calio

安装Tigera Calico插件和自定义资源

curl -O https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f tigera-operator.yaml

安装之前需要修改配置文件,Pod CIDR需要对应之前kubeadm init时候的pod cidr
image.png

wget https://docs.projectcalico.org/manifests/custom-resources.yaml
kubectl apply -f custom-resources.yaml

Calico插件配置完成,看到Master节点是Ready状态
image.png


6:worker节点加入master节点

在worker节点运行以下命令

kubeadm join 192.168.17.155:6443 --token 1ehkq9.fxtb47hpdzovg0cn \
    --discovery-token-ca-cert-hash sha256:1f27484438734da8bda129ef3d2adcba13ce44df1a016057e8c91d9b1147faf0

image.png

需要等待一段时间Master会自动给worker节点安装Calico插件
image.png

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×