环境准备
操作系统:Centos7
Kubernetes 1.5.1

参考链接:
方案一:阿里云资源安装方法:
https://yq.aliyun.com/articles/66474

1.19日更新
https://yq.aliyun.com/articles/68921
方案二:自定义安装方法:
https://mritd.me/2016/10/29/set-up-kubernetes-cluster-by-kubeadm/#rpm


由于k8s的官方安装包在墙外,而centos7开启vpn的实现不稳定,所以可以通过阿里云的镜像进行下载,或者去kubernetes的GitHub,release下有所有最新的rpm包(参考方案二)。目前CentOS可以通过下面的命令安装k8s软件。

初始化所有节点

请注意安装顺序

  1. 安装 socat
yum install -y socat
  1. 安装docker
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
  1. 启动docker
    service docker start
  2. 下载kubectl
curl -sSL http://k8s.oss-cn-shanghai.aliyuncs.com/kube/rpm/kubectl-1.5.1.x86_64.rpm -o kubectl-1.5.1.x86_64.rpm
  1. 下载kubelet
curl -sSL http://k8s.oss-cn-shanghai.aliyuncs.com/kube/rpm/kubelet-1.5.1.x86_64.rpm -o kubelet-1.5.1.x86_64.rpm
  1. 下载kubernetes-cni 插件
curl -sSL http://k8s.oss-cn-shanghai.aliyuncs.com/kube/rpm/kubernetes-cni-0.3.0.1-1.07a8a2.x86_64.rpm -o kubernetes-cni-0.3.0.1-1.07a8a2.x86_64.rpm
  1. 下载kubeadm
curl -sSL http://k8s.oss-cn-shanghai.aliyuncs.com/kube/rpm/kubeadm-1.6.0-0.alpha.0.2074.a092d8e0f95f52.x86_64.rpm -o kubeadm-1.6.0-0.alpha.0.2074.a092d8e0f95f52.x86_64.rpm
  1. 安装
rpm -ivh kubectl-1.5.1.x86_64.rpm kubelet-1.5.1.x86_64.rpm kubernetes-cni-0.3.0.1-1.07a8a2.x86_64.rpmkubeadm-1.6.0-0.alpha.0.2074.a092d8e0f95f52.x86_64.rpm
  1. 启动kubelet之前我们需要先修改
vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

为kubelet添加一个额外的参数,这样kubelet就不会在启动pod的时候去墙外的k8s仓库拉取pause-amd64:3.0镜像了

--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:
  1. 启动服务
setenforce 0

systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
  1. 预下载镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0gcr.io/google_containers/pause-amd64:3.0

PS:

  1. 阿里云的镜像也可能会存在失效的问题,如果遇到此种情况,可以尝试通过别的途径获取镜像,再重新打tag。具体实现可以参考方案二。
  2. 如果不执行这一步的话,在初始化Master(执行kubeadm init--pod-network-cidr="10.24.0.0/16"命令)的时候会卡在【Created APIclient, waiting for the control plane to become ready】

初始化Master

注意:如果在初识化的过程中,或者在执行kubeadm相关指令遇到问题,需要重新初始化master节点,应先Teardown,执行如下指令

kubeadm reset

初始化以前记得一定要启动 kubelet,虽然 systemctl status kubelet显示启动失败,但是也得启动。

systemctl enable kubelet
systemctl start kubelet

初始化master节点:master节点是控制组件运行的地方,包含apiserver,etcd,shecduler,controllermanager,proxy等等,这些组件都会以容器的方式由kubelet拉起。从上一步里面安装完成kubeadm及kubelet的机器中挑选一台执行如下命令:

export KUBE_REPO_PREFIX=registry.cn-hangzhou.aliyuncs.com/google-containers \
KUBE_HYPERKUBE_IMAGE=registry.cn-hangzhou.aliyuncs.com/google-containers/hyperkube-amd64:v1.5.1 \
KUBE_DISCOVERY_IMAGE=registry.cn-hangzhou.aliyuncs.com/google-containers/kube-discovery-amd64:1.0 \
KUBE_ETCD_IMAGE=registry.cn-hangzhou.aliyuncs.com/google-containers/etcd-amd64:3.0.4

systemctl stop firewalld.service#停止firewall
systemctl disable firewalld.service#禁止firewall开机启动
kubeadm init --pod-network-cidr="10.24.0.0/16"

因为我们使用flannel网络,所以必须指定 --pod-network-cidr="10.24.0.0/16"

记录下最后一句的指令,其中包含了的token,后续添加机器都应通过该token,eg:

kubeadm join --token=xxxxxxxxxxxxx 192.168.0.1

加入node节点

以下命令在在集群的非master节点上执行

systemctl stop firewalld.service#停止firewall
systemctl disablefirewalld.service#禁止firewall开机启动
kubeadm join --token <token> <master-ip>

如果碰到no route tohost问题,需要关闭centos防火墙

Kubernetes集群网络配置方案
在许多Node组成的kubernetes集群内,跨主机容器网络互通的kubernetes集训能够工作的前提。Kubernetes本身并不会对跨主机容器网络进行设置,这需要额外的工具来实现。一些开源的包括:flannel、OpenvSwitch、Weave、Calico都能够实现跨主机 容器间网络互通。flannel、Open vSwitch比较常用,这里是对flannel的方案实现:

在master上执行如下命令

kubectl apply -f http://k8s.oss-cn-shanghai.aliyuncs.com/kube/flannel-vxlan.yml
kubectl --namespace=kube-system get po

kubernetes-dashboard部署

在master上执行

kubectl apply -f http://k8s.oss-cn-shanghai.aliyuncs.com/kube/kubernetes-dashboard1.5.0.yaml
kubectl --namespace=kube-system describe svc kubernetes-dashboard

通过通过 describe 命令我们可以查看其暴露出的 NodePoint,然后便可访问
kubectl --namespace=kube-system describe svc kubernetes-dashboard