使用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
- 替换系统的软件源
# 默认注释了源码镜像以提高 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
- 安装相关的依赖包
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates \
curl software-properties-common
- 安装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
- 安装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
- 拉取后续需要使用的镜像文件
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
- 耐心等待镜像下载完全,就可以去克隆虚拟机了
以上使用的shell脚本均分享在github的create_env
文件夹里,在k8s_env.sh
和docker_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
节点上,添加kubectl
TAB键的提示和给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中,包含了Kubernetes
的dashboard
和metrics-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
上一篇: 吕蒙生擒威震三国的关羽后,他回到东吴又是什么结局?
下一篇: php+mysql无限级分类
推荐阅读
-
使用docker快速搭建Spark集群的方法教程
-
Linux(Centos7)下redis5集群搭建和使用说明详解
-
Docker如何使用nginx搭建tomcat集群
-
使用docker快速搭建Spark集群的方法教程
-
Linux(Centos7)下redis5集群搭建和使用
-
详解从 0 开始使用 Docker 快速搭建 Hadoop 集群环境
-
JAVAEE——宜立方商城08:Zookeeper+SolrCloud集群搭建、搜索功能切换到集群版、Activemq消息队列搭建与使用
-
使用Kubeadm在CentOS7.2上部署Kubernetes集群的方法
-
使用KubeAdm部署Kubernetes集群——如何访问google代码仓库及Yum源
-
kubernetes系列03—kubeadm安装部署K8S集群