Kubernetes 系列文章:

  1. 从 RunC 聊起
  2. Kubernetes 介绍与安装
  3. Pod
  4. Service

本文是 Kubernetes 系列的第二篇文章,在第一篇中主要是了解一下容器的历史,这一篇文章开始真正得了解一下 Kubernetes,当然,我是注重理论和实操结合的人,所以肯定得先有环境。在介绍 Kubernetes 的安装之前,我觉得有必要先对 Kubernetes 的结构做一个简单的介绍,这样对于安装过程可能就会比较少疑问。

首先在 Kubernetes 的集群结构上,节点被分为两种类型,分别是 MasterNode 类型,其中 Master 节点又称为控制节点,用于管理集群,主要任务有:

Node 节点主要负责容器的管理,用于运行容器和保证容器的状态。默认情况下,Master 节点不承担 Node 节点的功能,但是可以通过特殊的配置让 Master 节点也可以作为 Node 节点。

除了这些提到的组件之外,还有一个额外的组件 Etcd,它用于存储 Kubernetes 的元数据,但是不要求一定要以容器的形式运行,如果你想,可以直接以进程的形式运行起来,但是,后面我为了方便期间,还是以容器的方式运行。这些差不多就是我觉得安装 Kubernetes 前需要了解的前置知识了,下面我就开始介绍一下我是如何安装 Kubernetes 的。

安装前提

可能网络上有很多在墙内安装 Kubernetes 的教程了,但是,很遗憾,我这篇内容里面忽略了墙的因素,也就是说我这里假设你的服务器是在墙外的,或者可以无视墙,如果有墙的话,可能你需要做一些特别的设置来解决,这个我不在这篇文章讨论。

Master 和 Node 安装必要的软件

  1. [[email protected].io]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
  5. enabled=1
  6. gpgcheck=1
  7. repo_gpgcheck=1
  8. gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
  9. exclude=kube*
  10. EOF
  11. [[email protected].io]# swapoff -a
  12. [[email protected].io]$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  13. [[email protected].io]$ yum install docker-ce
  14. [[email protected].io]# systemctl start docker
  15. [[email protected].io]# systemctl enable docker
  16. # Set SELinux in permissive mode (effectively disabling it)
  17. [[email protected].io]# setenforce 0
  18. [[email protected].io]# systemctl stop firewalld
  19. [[email protected].io]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  20. [[email protected].io]# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  21. [[email protected].io]# systemctl enable --now kubelet

Master 节点初始化

  1. [[email protected].io]# kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.27.226
  2. [[email protected].io]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

这里可以根据你的环境需要将 192.168.27.226 换成你的机器 IP,或者删掉这一项也可以。当这些命令都运行完毕之后,你的 Kubernetes 集群应该是初步安装完毕了,接下来要将集群中的节点都加入到 Master 的管控之中,从而成为一个真正的整体。在 kubeadm init 的输出结果中,应该会有类似这样的提示:

  1. [bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
  2. [bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
  3. [bootstrap-token] creating the "cluster-info" ConfigMap in the "kube-public" namespace
  4. [addons] Applied essential addon: CoreDNS
  5. [addons] Applied essential addon: kube-proxy
  6. Your Kubernetes control-plane has initialized successfully!
  7. To start using your cluster, you need to run the following as a regular user:
  8. mkdir -p $HOME/.kube
  9. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  10. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  11. You should now deploy a pod network to the cluster.
  12. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  13. https://kubernetes.io/docs/concepts/cluster-administration/addons/
  14. Then you can join any number of worker nodes by running the following on each as root:
  15. kubeadm join 192.168.27.226:6443 --token supersupersupersecret \
  16. --discovery-token-ca-cert-hash sha256:alonglonglongtokenhere

将最后一段拷贝下来,然后在每个 Node 节点都执行一遍,接着就直接在 Master 节点上等待集群配置完成吧,稍等片刻之后,通过命令 kubectl get nodes 查看一下集群的节点状态:

  1. [[email protected].io]# kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. lq-master Ready master 7h v1.14.1
  4. lq-slave01 Ready worker 6h v1.14.1
  5. lq-slave02 Ready worker 6h v1.14.1

你应该可以看到类似的结果。如果你看到的结果和这不太一样,可以对照我之前写过的一篇:部署 kubernetes 遇到的坑 看一下是否可以自行定位出问题的结果。

基础概念

这里转载一张别人的图,我觉得画得很不错,所以就转在这里了,原作在最后得 Reference 中有链接,有兴趣可以点开查看一下,谢谢。

Reference