欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用kubeadm极速搭建Kubernetes集群

程序员文章站 2022-04-19 18:44:06
...

前言

最近在学习Kubernetes的使用,但其集群搭建颇为复杂,虽然网上有许多搭建的教程,但不是版本久远,相关资源找不到了,便是及其的复杂,对基本的基础设施环境也是一笔带过,在跟随步骤的时候总是出现写莫名其妙的问题。在参考了网上众多教程和自己的实践之后,整理了自己的一套方案,适用于学习使用。
Kubernetes部署方案至少三种,使用minikube搭建单机的集群,这个方法可以很快的体验Kubernetes,但在学习某些内容的时候会由于只有一个节点会进行不下去,此是该部署链接使用minikube部署Kubernetes;第二种方法便是使用kubeadm部署多个节点的集群,步骤适中,坑也比较多;第三种便是使用二进制文件来部署,步骤非常复杂,适用于生产环境。作为学习为目的的话,前两种方案较为适合。本文是使用第二种方案进行集群搭建的(脚本在create_envs里),这样可以有多个节点。

基本环境

使用VirtualBox创建一个Ubuntu 18.04 Server的虚拟机,网络采用桥接的方式,至少配置2 CPU和2G Memory(这个是Kubernetes对硬件的对低要求),按下面环境部署步骤准备好后在进行虚拟机克隆3个(按需),修改主机名即可。需要注意的是,克隆虚拟机的时候要勾选重新分配网络的选项,之后还需要修改hostname,方法如下:

sudo hostnamectl set-hostname <your-hostname>
sed -i "s/preserve_hostname: false/preserve_hostname: true/g" /etc/cloud/cloud.cfg

重新登录下hostname就会是变成刚才改的了

环境部署

shell script: create_envs/k8s_env.sh & create_envs/docker_operations.sh

  1. 替换系统的软件源
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu bionic stable
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
  1. 安装相关的依赖包
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates \
curl software-properties-common
  1. 安装docker-ce 18.06版本
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable"
sudo apt-get install docker-ce # 添加了软件库后运行命令sudo apt-cache policy docker-ce 看下最新版本是多少,不是18.06就指定版本安装
cat > /etc/docker/daemon.json << EOF
{
	"registry-mirrors": ["https://<your-mirrors-address>"]
}
EOF   # 此步骤主要用于镜像加速,没有也可
systemctl restart docker
  1. 安装kubeadm,kubectl,kubelet工具,版本为v1.14.2
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo add-apt-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
sudo apt-get update
echo 'installing kube*'
K8S_VERSION='1.14.2-00 500' # 同上,可以先查看下当前最新版本是啥,适当修改
sudo apt-get install -y kubelet=$K8S_VERSION kubeadm=$K8S_VERSION kubectl=$K8S_VERSION
  1. 拉取后续需要使用的镜像文件
K8S_VERSION=v1.14.1
ETCD_VERSION=3.3.10
DASHBOARD_VERSION=V1.10.1
FLANNEL_VERSION=V0.10.0-amd64
DNS_VERSION=1.3.1
PAUSE_VERSION=3.1
# basic components
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:$K8S_VERSION
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:$K8S_VERSION
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:$K8S_VERSION
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:$K8S_VERSION
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:$ETCD_VERSION
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION
# network components
sudo docker pull quay.io/coreos/flannel:$FLANNEL_VERSION

# 修改tag,不然kubeadm在使用镜像的时候会以为木有就去下载(gcr.io这个域名*也不行...)
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:$K8S_VERSION k8s.gcr.io/kube-apiserver:$K8S_VERSION
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:$K8S_VERSION k8s.gcr.io/kube-controller-manager:$K8S_VERSION
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:$K8S_VERSION k8s.gcr.io/kube-scheduler:$K8S_VERSION
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:$K8S_VERSION k8s.gcr.io/kube-proxy:$K8S_VERSION
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:$ETCD_VERSION k8s.gcr.io/etcd:$ETCD_VERSION
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION k8s.gcr.io/coredns:$DNS_VERSION
  1. 耐心等待镜像下载完全,就可以去克隆虚拟机了

以上使用的shell脚本均分享在githubcreate_env文件夹里,在k8s_env.shdocker_operations.sh文件里,可以直接执行使用,具体说明见README.md

Kubernetes 集群搭建

假设现在已经有4台(2台及以上都OK)满足上述要求的虚拟机,其IP如下

主机名 IP
k8s-node01 192.168.0.103
k8s-node02 192.168.0.104
k8s-node03 192.168.0.105
k8s-node04 192.168.0.106

计划将k8s-node01作为集群的master,其余作为节点
master节点上执行下列命令

# 如果之前有部署过,需要将.kube文件夹清理掉,里面会记录kubectl工具和apiserver一些信息
sudo rm -rf ~/.kube
# 关闭swap
sudo swapoff -a
# 注意,由于我们镜像下载kubernetes的version是1.14.1的,所以在这里启动的时候也要填写1.14.1,即要和之前下载的镜像版本一致。
sudo kubeadm init --kubernetes-version=1.14.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=$(hostname -I | awk '{print $1}')
# 创建.kube 文件夹(在kubeadm init后几行日志会提示的)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 添加flannel网络插件
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.11.0/Documentation/kube-flannel.yml

在剩余的三个node虚拟机上,执行如下命令

# 关闭swap
sudo swapoff -a
# 在master节点执行kubeadm init命令成功后,复制日志中kubeadm join的命令即可,以下仅作于示例
sudo kubeadm join 192.168.0.104:6443 \
--token 315z7z.u6xbqnnqzkwbon01 \
--discovery-token-ca-cert-hash sha256:27124d08cb64619055d9f56547c3e6cd0218f4c420a9a7c863dd7e082b9c1216

master节点上,添加kubectlTAB键的提示和给kubectl取别名,并检查集群状态

aaa@qq.com:~$ kubectl completion bash | sed "s/kubectl/k/g" >> ~/.bashrc
aaa@qq.com:~$ source ~/.bashrc
aaa@qq.com:~$ k get node
NAME         STATUS     ROLES    AGE     VERSION
k8s-node01   Ready      master   2d23h   v1.14.2
k8s-node02   Ready      <none>   2d23h   v1.14.2
k8s-node03   Ready      <none>   32h     v1.14.2
k8s-node04   Ready      <none>   32h     v1.14.2

所有的节点都准备好,即Kubernetes集群就搭建完成,可以愉快地学习了~

在上面提到的github中,包含了Kubernetesdashboardmetrics-server的配置文件,已做过修改,即可食用~

kubectl create -f ./dashboard/ -f ./metrics-server/

创建完成后,在浏览器中访问https://192.168.0.104:30001/即可,所需要的token运行命令./dashboard/dashboard_token.sh即可获取(token后面的那一大串字符):

aaa@qq.com:~/kubernetes$ ./dashborad/dashboard_token.sh
Name:         dashboard-admin-token-4w9hm
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: dashboard-admin
              kubernetes.io/service-account.uid: a173be6d-7d70-11e9-a41a-080027c41ee4

Type:  kubernetes.io/service-account-token

Data
====
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tNHc5aG0iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYTE3M2JlNmQtN2Q3MC0xMWU5LWE0MWEtMDgwMDI3YzQxZWU0Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.FrSOQQalyMyGMOXVUz8pJRQ-XlvYtrLi1LYLzHVkGpfp_ECOn2AWUkfPRY0rzu8XdsK3W86DUu-0w5exl2FvaEiw69JIHFHUlxS5xfIS33r9Bjv-K6Zb8iCcnwRqKHtj8LJ2OVWTWbE8_WwvtRri-EghLcODSrUKBnRa1fPPhs-6se-ytI_sTlXRRyI7ztOLJpTgEyY0whXirlKQIo6vzAaFxlNNejJLaUN7RkP1h1y9x30c8bV4MXk0KSreY48PvyT17NuszB88fTxKodtgdstCGD94XGrkOyOvufAjZ00uVpj5N2TpV6Sqj3nn_IPwTccPONSPHEufUjEX-AeMAw
ca.crt:     1025 bytes

使用kubeadm极速搭建Kubernetes集群

使用kubeadm极速搭建Kubernetes集群