在Ubuntu 18.04上部署Kubernetes
Kubernetes已成为在云中进行容器编排和调度的事实上的平台。现在可以从所有主要的云平台(例如AWS,Azure和GCP)使用它。甚至像Digital Ocean这样的小型云提供商也提供产品。
Kubernetes是为云设计的,其架构依赖于它。但是,对于那些希望在前提下运行完整Kubernetes集群的人来说,这样做的能力是有限的。直到最近,我们才需要使用带有NSX的vSphere来享受全部功能。通过创建MetalLB,我们现在可以在裸机上或者在任何基础架构上将VM作为虚拟机运行。
在本教程中,将向我们展示如何在Ubuntu 18.04之上构建自己的集群。
准备工作
以下内容应视为在内部搭建Kubernetes集群的最低要求。实际节点大小将在很大程度上取决于我们希望迁移到Kubernetes的工作负载类型。
- 管理员:具有2个CPU和2 GB RAM的Ubuntu 18.04服务器
- 节点:具有2个CPU和1 GB RAM的Ubuntu 18.04服务器
安装Docker
Kubernetes是Docker的协调器,这意味着任何运行Kubernetes的系统都将需要Docker。以下说明基于Docker为Ubuntu 18.04提供的文档。
- 为Docker安装依赖项
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
- 为官方的Ubuntu Docker存储库安装GPG密钥。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 添加正式的Docker存储库。
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
- 安装Docker Community Edition。
sudo apt install docker-ce
配置Docker代理设置
如果Kubernetes节点在代理后面,则需要配置代理设置。 Docker将不会使用通过环境变量设置的代理设置。相反,我们将必须为Docker配置SystemD服务以设置代理。
- 创建目录以存储Docker SystemD配置文件。
mkdir /etc/systemd/system/docker.service.d
- 创建一个名为http-proxy.conf的配置文件,并将以下内容添加到该文件中。
[Service] Environment="HTTP_PROXY=https://web-proxy.corp.xxxxxx.com:8080/" Environment="HTTPS_PROXY=https://web-proxy.corp.xxxxxx.com:8080/" Environment="NO_PROXY=localhost,127.0.0.1,localaddress,.localdomain.com
- 运行systemctl守护程序重新加载。
sudo systemctl daemon-reload
- 重新启动Docker。
sudo systemctl restart docker
安装Kubernetes
Kubernetes具有Ubuntu的官方存储库。我们将通过apt安装Kubernetes的软件包,以简化我们的服务器配置。
- 添加Kubernetes GPG密钥
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
- 添加官方存储库。
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
- 安装Kubernetes
sudo apt install kubeadm
- 禁用交换。
sudo swap off -a
- 打开/ etc / fstab并注释掉交换分区。
创建新的Kubernetes集群(管理器节点)
我们选择作为主节点的服务器之一,必须启动新的Kubernetes集群。运行以下命令以创建一个将子网10.224.0.0/16用于其内部网络的新群集。
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
成功启动Kubernetes集群后,kubeadm将输出连接集群所需的信息,以及有关如何向集群添加节点的信息。保留此信息的记录,因为没有它,我们将无法将新节点加入集群。
Your Kubernetes master 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/ You can now join any number of machines by running the following on each node as root: kubeadm join 192.168.54.18:6443 --token 01i2nx.veva1984qksr731c --discovery-token-ca-cert-hash sha256:8773dc61ef0fc5bddc9bd231406c19241fac298f3c423d01741b12d17d5da23a
添加CNI网络层
Kubernetes是非常模块化的,可以灵活配置每个核心组件。对于联网,我们可以使用许多选项。我们决定使用哪一个可能取决于我们计划在其中运行Kubernetes的环境。在本教程中,我们将使用Flannel。另一个流行的选择是编织网。
- 为Kubernetes安装Flannel CNI插件。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
第2层网络
Kubernetes是一个专为在云环境中运行而设计的平台。由于这样的Kubernetes在很大程度上依赖于云平台提供的网络API,因此将其部署到外部公开服务和Pod。对于任何想在公共或者私有云平台之外运行Kubernetes的人来说,这当然是有问题的。
MetalLB通过提供一种向Kubernetes本地添加网络第2层功能的方法来解决这一差距。使用它,我们可以分配IP地址范围,以分配用于外部网络的服务和Pod。
- 为MetalLB配置Kubernetes。
- 安装MetalLB插件。
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/example-layer2-config.yaml
- 通过创建yam文件配置MetalLB。我们将文件命名为metallb-config.yaml,它将具有以下内容。
--- apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: config data: config: | address-pools: - name: default protocol: layer2 addresses: - 192.168.57.224/27
将节点加入集群
使用我们在启动集群时kuebadm输出的信息,现在可以将节点加入集群了。
- 将节点加入集群。
kubeadm join 192.168.54.18:6443 --token 01i2nx.veva1984qksr731c --discovery-token-ca-cert-hash sha256:8773dc61ef0fc5bddc9bd231406c19241fac298f3c423d01741b12d17d5da23a
- 验证新节点的状态。
kuebadm get nodes