在Ubuntu上安装Kubernetes集群

方案选择

根据kubernetes官网给的setup说明书 https://kubernetes.io/docs/setup/independent/install-kubeadm/,我们可以有多种方案来安装kubernetes:

  1. 社区版的kubernetes,比如minikube, 开源但是不够稳定
  2. 交钥匙方案的kubernetes,比如 Docker Desktop, minishift,搭建简单但比较封闭
  3. 云平台的kubernetes,AWS, AZURE. GCE等,好用但是贵
  4. 自定义安装,kubeadm,灵活安装但比较复杂
    这里我们选择 kubeadm 进行安装,虽然复杂,但只有通过一步步操作才能对kubernetes内部的构成和作用有个大概的印象

为何要选择在Ubuntu上安装

完全是个人喜好问题,没有原因。。。
这里选用的 Ubuntu 18.04.2 LTS
CPU 4核
内存 8G
磁盘 40G
豪华配置,只为快。。。

安装docker

可以根据 https://docs.docker.com/install/linux/docker-ce/ubuntu/ 提供的几种安装方法选一种进行安装。
但是由于我们安装docker是作为kubernetes的运行时环境,一定要保证docker版本在Ubuntu里面能和kubernetes兼容。
所以这里我们选用的Ubuntu提供的docker安装源进行安装:
切换到root用户

apt-get update
apt-get install -y docker.io

安装完成之后通过 docker --version 来验证是否成功安装以及docker的版本号

docker --version
Docker version 18.09.2, build 6247962

安装kubeadm

根据https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/,kubeadm提供给了我们快速构建kubernetes集群的能力。
首先我们需要对其进行安装

apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat </etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

从安装命令里面我们可以看到,这里不仅装了kubeadm,还装了kubectl和kubelet。
kubectl提供给我们访问kubernetes API的命令式工具
kubelet则是用于在每一个宿主机上根据具体的命令调用运行时容器(这里为docker)的命令来构建Pod和container。

部署Master节点

用kubeadm部署master节点只需要一条命令就可以完成

kubeadm init [flags]

其中flags表示我们可以额外进行的配置,可配置选项可以参考https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/
如果部署的时候提示不支持swap的错误,可以通过以下命令将swap分区禁掉

swapoff -a

在init期间kubeadm做了很多事情:

  1. 对当前系统进行一系列的检查看是否符合kubernetes运行需求,有些不严重的检查会以warning的形式告知我们,而有些严重的检查会以error的形式告知我们并同时结束init过程,直到我们解决问题或者通过配置 --ignore-preflight-errors= 忽略问题

  2. 为即将安装的组件生成一系列的证书,默认放在 /etc/kubernetes/pki 目录下

  3. 在 /etc/kubernetes/ 目录下生成一些配置文件提供给后续安装的kubelet,controller-manager等用于访问API server

  4. 启动master节点相关的pod:

    pod名称 作用
    kube-apiserver k8s api 服务端,用于处理rest请求
    kube-controller-manager k8s核心控制循环,通过api server获取状态并对集群状态进行改变
    kube-scheduler k8s 调度器,通过一定的策略综合性能资源的限制进行资源调度
    etcd k8s使用的数据库
  5. 等上面几个pods启动完成后,Master节点会被打上“污点”标签,用来保证不会有其他业务相关的pod被调度到master节点,以保证master节点能正常运行

  6. 生成节点加入时需要用到的token和配置

  7. 添加默认的插件,这里包括CoreDNS和kube-proxy

至此Master节点部署顺利完成!
在init操作命令打印结果的最后我们可以看到一些提示
在Ubuntu上安装Kubernetes集群_第1张图片

  1. 由于Kubernetes 集群默认需要加密方式访问,所以我们需要通过以下命令才能用kubectl对kubernetes集群进行访问

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  2. 我们需添加一个pod网络插件用于容器间的相互通信,如果没有网络插件,所有和其相关的pod都会调度失败。这里我们选用weave

    kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
    
    
  3. 如果我们需要添加工作节点,则需要通过上面提供的join命令来完成

    kubeadm join 172.16.38.137:6443 --token 95ex69.lq0r14fzgzq629e1 \
    --discovery-token-ca-cert-hash sha256:982fccda0ee2929cb774bd975cbc01274c268c11682b08ed581d5412cca291c0
    

部署worker节点

worker节点的部署比较简单。
和Master节点一样先执行安装docker和kubeadm相同的步骤。
然后调用上面的join命令即可

配置kubernetes单节点集群

上面在kubeadm init的过程中我们提到过master节点会被打上“污点”标签,从而导致master节点不会被纳入业务pod的调度范围。所以正常情况下我们需要两个宿主机才能构建一个正常运行的kubernetes cluster。
在Ubuntu上安装Kubernetes集群_第2张图片
但是在一般的试验测试环境下,我们没有必要搭建这么庞大的环境。
所以我们可以通过手动将master节点的“污点”标签给去掉来允许master节点的可调度性。

kubectl taint nodes --all node-role.kubernetes.io/master-

这条命令最后的“-”号表示删除所有以 “node-role.kubernetes.io/master” 为键的“污点”标签。
至此,单节点的kubernetes cluster就部署完毕了。

你可能感兴趣的:(kubernetes)