使用kubeadm极速搭建Kubernetes集群

前言

最近在学习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-node01192.168.0.103
k8s-node02192.168.0.104
k8s-node03192.168.0.105
k8s-node04192.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取别名,并检查集群状态

barnett@k8s-node01:~$ kubectl completion bash | sed "s/kubectl/k/g" >> ~/.bashrc
barnett@k8s-node01:~$ source ~/.bashrc
barnett@k8s-node01:~$ 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后面的那一大串字符):

barnett@k8s-node01:~/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

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值