在centos7上,使用kubeadm安装Kubernetes群集

译自 Kubernetes官网,原文有删减。

概要


本文将向您展示:如何在运行CentOS 7的计算机上轻松安装一个安全的Kubernetes(以下称K8s)群集。该安装使用名为kubeadm的工具,该工具是K8s1.4的一部分。

假定您有一组已启动并正在运行的计算机(虚拟机或物理机,以下称节点),K8s被设计为更大配置系统的一部分或仅仅是为了容易手动配置。如果你有自己的基础设施(例如裸机),或一个现成的编排系统(例如chef),那么你可以将其与K8s集成。

前提条件


准备3台或以上运行有Centos7的节点,内存1G以上,网络互通,列表如下

节点 IP 主机名
node1 10.1.2.61 master
node2 centered K8s_node1
node3 are neat K8s_node2
noden xxx K8s_noden

目标


  1. 在您的节点上安装一个安全的K8s群集
  2. 在K8s群集上安装pod网络,以便应用程序组件(pod)可以相互通信
  3. 在K8s集群上安装一个微服务应用程序socks shop

操作指南


(1/4) 在节点上安装kubelet和kubeadm


您将在所有节点上安装以下软件包:

软件 用途 备注
docker K8s依赖的容器运行环境 建议1.11.2版本,但v1.10.3和v1.12.1也可以工作地很好
kubelet K8s最核心的组件 它在集群中所有的节点上运行,并执行启动pod和容器等操作
kubectl 用于在群集运行后控制群集的命令 你只需要在master节点上运行,但在其他节点上也是有用的
kubeadm 群集引导程序

以root用户登陆每个节点,由于geogle的K8s源被墙,这里添加阿里云的K8s源。运行以下命令

# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes] 
name=Kubernetes 
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 
enabled=1 
gpgcheck=1 
repo_gpgcheck=1 
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

# yum makecache

# yum install -y kubelet kubeadm kubectl kubernetes-cni 

# systemctl enable docker && systemctl start docker 
# systemctl enable kubelet && systemctl start kubelet

kubelet现在每隔几秒重新启动,因为它在kubeadm的崩溃循环中,等待告诉它该做什么

(2/4) 初始化master节点


master是运行”控制平面”组件的节点,包括etcd(群集数据库)和API服务器(kubect CLI与之通信)。所有这些组件都运行在由kubelet启动的pod中。

选择先前安装了kubelet和kubeadm的一个节点作为master节点,运行

# kubeadm init

这将自动检测master节点网络,以通知群集master节点的IP作为默认网关。如果要使用其他节点IP,运行

# kubeadm init --api-advertise-addresses = IP

如果您想使用flannel作为pod网络,运行

# kubeadm init --pod-network-cidr = IP/N

但是对于任何其他网络(包括Weave),这是pod网络不需要的。

执行以上命令中的任意一条后,master节点将下载并安装集群数据库和“控制面板”组件,这可能会需要几分钟,输出如下所示

<master/tokens> generated token: "f0c861.753c505740ecde4c" 
<master/pki> created keys and certificates in "/etc/kubernetes/pki" 
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf" 
<util/kubeconfig> created "/etc/kubernetes/admin.conf" 
<master/apiclient> created API client configuration 
<master/apiclient> created API client, waiting for the control plane to become ready 
<master/apiclient> all control plane components are healthy after 61.346626 seconds 
<master/apiclient> waiting for at least one node to register and become ready 
<master/apiclient> first node is ready after 4.506807 seconds 
<master/discovery> created essential addon: kube-discovery 
<master/addons> created essential addon: kube-proxy 
<master/addons> created essential addon: kube-dns 

Kubernetes master initialised successfully! 

You can connect any number of nodes by running: 

kubeadm join --token token master_ip

记录以上输出中的 token 密钥,该密钥用于master节点和加入节点之间的相互认证。请妥善保管群集密钥,因为任何人有这个密钥都可以添加新节点到K8s群集。

默认情况下,出于安全原因,群集将不会调度pods到master节点。如果您希望调度pods到master节点,例如单机k8s进行开发,请在群集中任意一个节点上运行:

# kubectl taint nodes --all dedicated- 

node "xxx" tainted 
taint key="dedicated" and effect="" not found. 
taint key="dedicated" and effect="" not found.

这将从具有pod的任意节点(包括master节点)中移除“专用”污染,调度器随后将在任意节点上调度pod。

(3/4) 安装一个pod网络


在将任何应用程序部署到群集和启动kube-dns之前,您必须安装pod网络,以便您的pods之间可以跨主机通信,这里使用官方推荐的 weave 方式,注意:每个群集只能安装一个pod网络。

# kubectl apply -f https://git.io/weave-kube //标准格式为kubectl apply -f <add-on.yaml>

查看系统服务状态

# kubectl get pods --all-namespaces 

安装pod网络后,通过检查kube-dns pod是否在输出中运行,来确认其是否正常工作。若工作正常,则我们可以继续添加新节点到群集。


(4/4) 加入你的节点


节点是运行工作负载(容器和pod等)的位置。在新节点上,我们执行以下命令使其成为k8s集群的minion节点

# kubeadm join --token token master_ip //token是群集密钥

接着在master节点上运行命令,验证新节点是否成功加入

# kubectl get nodes 

(可选)从master以外的节点控制群集

为了得到一个kubectl在你的笔记本电脑上,例如谈到你的群集,你需要将KubeConfig文件从你的主机到你的笔记本电脑,如下所示:

# scp root@<master ip>:/etc/kubernetes/admin.conf . 
# kubectl --kubeconfig ./admin.conf get nodes

(可选)安装示例应用程序

例如,安装一个示例微服务应用程序:a socks shop,使您的群集通过其步伐。 要了解有关示例微服务应用程序的更多信息,请参阅GitHub自述文件

# kubectl create namespace sock-shop 
# kubectl apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"

然后,您可以通过运行以下命令找出,为前端分配的服务节点端口

# kubectl describe svc front-end -n sock-shop 

Name: front-end 
Namespace: sock-shop 
Labels: name=front-end 
Selector: name=front-end 
Type: NodePort 
IP: 100.66.88.176 
Port: <unset> 80/TCP 
NodePort: <unset> 31869/TCP 
Endpoints: <none> 
Session Affinity: None

它需要几分钟下载并启动所有的容器,查看kubectl get pods -n sock-shop的输出,看看它们什么时候开始运行。

然后,在浏览器中输入master节点的IP地址,并指定端口,例如http: //Master_IP_port。在上面的示例中,Port是31869,但它是一个不同的端口。如果centos7中开启防火墙,请确保在尝试访问端口之前,将该端口暴露给互联网。

拆除


要卸载socks shop服务,请在master节点上运行kubectl delete,以删除命名空间sock-shop。

要撤消kubeadm的功能,只需删除为本教程创建的机器,或运行以下脚本,然后重新启动或卸载软件包。

重置本地状态

# systemctl stop kubelet 

# docker rm -f -v $(docker ps -q)

# find /var/lib/kubelet | xargs -n 1 findmnt -n -t tmpfs -o TARGET -T | uniq | xargs -r umount -v 

# rm -rf /etc/kubernetes /var/lib/kubelet /var/lib/etcd

如果要重新启动,请运行systemctl restart kubelet,然后运行kubeadm initkubeadm join

相关文章
相关标签/搜索