使用kubeadm搭建k8s

前言

本地搭建可以使用kind或者
minikube,这两个工具可以快速搭建本地环境,可以用作练习,要搭建生产集群,还是得使用
kubeadm

Kubeadm是社区官方持续维护的集群搭建工具,在Kubernertes v1.13 版本的时候就已经GA了,它跟着Kubernetes 的版本一起发布,目前Kubeadm代码放在 Kubernetes的主代码库中。

所以Kubeadm有一个很大的优势,随时可以搭建出最新的k8s集群,其他的工具则要等新版本k8s出来之后,进行一段时间的适配。并且使用Kubeadm日后进行k8s升级也是非常方便的,还有很多优势可以参考官方文档,现在k8s文档已经支持中文了。

开始

准备一台服务器,kubeadm只支持linux,我这里使用的是Debian8,centOS也可以。

  1. 首先需要安装docker

docker的安装非常简单,官方文档写得非常清楚

  1. 安装kubectlkubeletkubeadm 这一步很关键,需要先添加k8s的源,如果按照官方文档来安装,添加的是谷歌自己的源,如果服务器没翻墙后面的操作都没法进行,所以我们这里添加阿里云的源。
root@n227-090-158:~# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

添加之后就可以安装基础组件了

root@n227-090-158:~# apt-get install kubectl kubelet kubeadm
  1. 初始化集群
root@n227-090-158:~# kubeadm init --pod-network-cidr=10.227.90.158/16 --image-repository registry.aliyuncs.com/google_containers --apiserver-advertise-address=192.168.122.21
  • 这里使用的是kubeadm init这个命令,并且通过--image-repository指定了阿里云镜像仓库地址,因为k8s.grc.io也是无法访问的。
  • pod网段为10.227.90.158/16
  • apiserver地址就是本地IP

初始化成功后看到的是如下输出:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.227.90.158:6443 --token 9l1kct.s6x9p28h1bv8slkl \
    --discovery-token-ca-cert-hash sha256:156a2d99de3c1113aee940c4a478bc5d4da9fb6a0f845a2a517a68e12158a3b8

然后按照提示执行如下命令,这是在master节点上拷贝kubeconfig 文件到kubectl默认的kubeconfig路径下

root@n227-090-158:~# mkdir -p $HOME/.kube
root@n227-090-158:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@n227-090-158:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. 加入集群

上面的输出中也给出了加入集群的命令,我们可以在另一个机器上输入上面的命令即可加入这个集群,但是要保证两台机器网络是互通的。

root@n227-090-158:~# kubeadm join 10.227.90.158:6443 --token 9l1kct.s6x9p28h1bv8slkl \
    --discovery-token-ca-cert-hash sha256:156a2d99de3c1113aee940c4a478bc5d4da9fb6a0f845a2a517a68e12158a3b8
  1. 安装calico网络

查看node和pod发现是notReady状态

root@n227-090-158:~# kubectl get node
NAME           STATUS     ROLES    AGE   VERSION
n227-090-158   NotReady   master   59m   v1.18.0
root@n227-090-158:~# kubectl get pod --all-namespaces
NAMESPACE     NAME                                        READY   STATUS    RESTARTS   AGE
kube-system   coredns-7ff77c879f-fsj9l                    0/1     Pending   0          2m12s
kube-system   coredns-7ff77c879f-q5ll2                    0/1     Pending   0          2m12s
kube-system   etcd-master01.paas.com                      1/1     Running   0          2m22s
kube-system   kube-apiserver-master01.paas.com            1/1     Running   0          2m22s
kube-system   kube-controller-manager-master01.paas.com   1/1     Running   0          2m22s
kube-system   kube-proxy-th472                            1/1     Running   0          2m12s
kube-system   kube-scheduler-master01.paas.com            1/1     Running   0          2m22s

这是因为corednspod没有启动,缺少网络pod,所以我们需要安装calico网络

root@n227-090-158:~# kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

安装完成后再查看集群状态,发现已经正常了

root@n227-090-158:~# kubectl get pod --all-namespaces
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-65d7476764-mjjtm   1/1     Running   0          67s
kube-system   calico-node-fk5qw                          1/1     Running   0          67s
kube-system   coredns-7ff77c879f-kw2z7                   1/1     Running   0          60m
kube-system   coredns-7ff77c879f-pbh9z                   1/1     Running   0          60m
kube-system   etcd-n227-090-158                          1/1     Running   0          60m
kube-system   kube-apiserver-n227-090-158                1/1     Running   0          60m
kube-system   kube-controller-manager-n227-090-158       1/1     Running   0          60m
kube-system   kube-proxy-rh2vr                           1/1     Running   0          60m
kube-system   kube-scheduler-n227-090-158                1/1     Running   0          60m
root@n227-090-158:~# kubectl get node
NAME           STATUS   ROLES    AGE   VERSION
n227-090-158   Ready    master   61m   v1.18.0
  1. 生成token

推荐使用Firefox浏览器,Chrome新版如果证书有问题已经不能继续访问了,Firefox可以,这个时候通过ip:30000访问dash-board会进入一个页面,提示你输入token,可以参考这个文章生成token。生成之后填入输入框就可以进入dashboard主页面了。

root@n227-090-158:~# kubectl -n kube-system describe secret admin-token-fqxsw

image

结语

k8s现在安装已经比以前简单太多了,这篇文章作为个人学习记录,如果参考之后安装有什么问题可以在GitHub通过邮件联系我。

参考

  • 拉勾教育-Kubernetes 原理剖析与实战应用

   转载规则

本文不允许转载。
 本篇
使用kubeadm搭建k8s 使用kubeadm搭建k8s
前言 本地搭建可以使用kind或者minikube,这两个工具可以快速搭建本地环境,可以用作练习,要搭建生产集群,还是得使用kubeadm。 Kubeadm是社区官方持续维护的集群搭建工具,在Kubernertes v1.13 版本的时候
2021-04-15
下一篇 
SSM重构到SpringBoot导致@Scheduled失效的坑 SSM重构到SpringBoot导致@Scheduled失效的坑
SSM重构到SpringBoot定时任务失效的坑 最近重构老项目, 把SSM的祖传代码升级成SpringBoot, 最后发现原先代码中使用了@Scheduled注解的定时任务不再执行. 背景SSM项目中使用spring-task需要在xm