前言
本地搭建可以使用kind或者
minikube,这两个工具可以快速搭建本地环境,可以用作练习,要搭建生产集群,还是得使用
kubeadm。
Kubeadm
是社区官方持续维护的集群搭建工具,在Kubernertes v1.13
版本的时候就已经GA了,它跟着Kubernetes
的版本一起发布,目前Kubeadm
代码放在 Kubernetes
的主代码库中。
所以Kubeadm
有一个很大的优势,随时可以搭建出最新的k8s集群,其他的工具则要等新版本k8s出来之后,进行一段时间的适配。并且使用Kubeadm
日后进行k8s升级也是非常方便的,还有很多优势可以参考官方文档,现在k8s文档已经支持中文了。
开始
准备一台服务器,
kubeadm
只支持linux
,我这里使用的是Debian8,centOS也可以。
- 首先需要安装docker
docker的安装非常简单,官方文档写得非常清楚。
- 安装
kubectl
、kubelet
、kubeadm
这一步很关键,需要先添加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
- 初始化集群
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
- 加入集群
上面的输出中也给出了加入集群的命令,我们可以在另一个机器上输入上面的命令即可加入这个集群,但是要保证两台机器网络是互通的。
root@n227-090-158:~# kubeadm join 10.227.90.158:6443 --token 9l1kct.s6x9p28h1bv8slkl \
--discovery-token-ca-cert-hash sha256:156a2d99de3c1113aee940c4a478bc5d4da9fb6a0f845a2a517a68e12158a3b8
- 安装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
- 生成token
推荐使用Firefox浏览器,Chrome新版如果证书有问题已经不能继续访问了,Firefox可以,这个时候通过ip:30000访问dash-board会进入一个页面,提示你输入token,可以参考这个文章生成token。生成之后填入输入框就可以进入dashboard主页面了。
root@n227-090-158:~# kubectl -n kube-system describe secret admin-token-fqxsw
结语
k8s现在安装已经比以前简单太多了,这篇文章作为个人学习记录,如果参考之后安装有什么问题可以在GitHub通过邮件联系我。
参考
- 拉勾教育-Kubernetes 原理剖析与实战应用