K8S脉络整理(004)-K8S-Cluster部署

官方安装文档可以参考 https://kubernetes.io/docs/setup/independent/install-kubeadm/.

使用Kubespray在ubuntu上自动部署K8s1.9.0集群:http://www.cnblogs.com/DaweiJ/p/8462848.html

CloudMan的blog:http://www.cnblogs.com/CloudMan6/p/8269620.html


 

使用kubespary自动部署概要步骤:

若可FQFQ,可直接下载gcr.io/google_containers/相关镜像25个。

不FQ部署步骤详见:http://www.cnblogs.com/DaweiJ/p/8462848.html

概要如下

1、安装最新ansible

2、下载kubespary

3、安装docker及其他依赖包

4、下载镜像

5、修改ansible相关配置,inventory文件

6、安装

ansible-playbook -i inventory/inventory.cfg cluster.yml

7、troubles shooting

8、集群扩展

 


 

一般部署概要步骤:

一、Master安装

1、安装 Docker

  所有节点都需要安装 Docker。

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

2、安装 kubelet、kubeadm 和 kubectl

在所有节点上安装 kubelet、kubeadm 和 kubectl。

kubelet 运行在 Cluster 所有节点上,负责启动 Pod 和容器。

kubeadm 用于初始化 Cluster。

kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。

apt-get update && apt-get install -y apt-transport-httpscurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -cat <<EOF >/etc/apt/sources.list.d/kubernetes.listdeb http://apt.kubernetes.io/ kubernetes-xenial mainEOFapt-get updateapt-get install -y kubelet kubeadm kubectl

  用 kubeadm 创建 Cluster

  完整的官方文档可以参考 https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

  初始化 Master

  在 Master 上执行如下命令:

  kubeadm init --apiserver-advertise-address 192.168.56.105 --pod-network-cidr=10.244.0.0/16

  --apiserver-advertise-address 指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。

  --pod-network-cidr 指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 --pod-network-cidr 有自己的要求,这里设置为 10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个  CIDR。在后面的实践中我们会切换到其他网络方案,比如 Canal。

初始化过程简要如下:

① kubeadm 执行初始化前的检查。

② 生成 token 和证书。

③ 生成 KubeConfig 文件,kubelet 需要这个文件与 Master 通信。

④ 安装 Master 组件,会从 goolge 的 Registry 下载组件的 Docker 镜像,这一步可能会花一些时间,主要取决于网络质量。

⑤ 安装附加组件 kube-proxy 和 kube-dns。

⑥ Kubernetes Master 初始化成功。

⑦ 提示如何配置 kubectl,后面会实践。

⑧ 提示如何安装 Pod 网络,后面会实践。

⑨ 提示如何注册其他节点到 Cluster,后面会实践。

配置 kubectl

kubectl 是管理 Kubernetes Cluster 的命令行工具,前面我们已经在所有的节点安装了 kubectl。Master 初始化完成后需要做一些配置工作,然后 kubectl 就能使用了。

依照 kubeadm init 输出的第 ⑦ 步提示,推荐用 Linux 普通用户执行 kubectl(root 会有一些问题)

我们为 daweij 用户配置 kubectl:  ubuntu用户默认不创建HOME,参考:http://www.cnblogs.com/DaweiJ/p/8522092.html

useradd -r -m -s /bin/bash daweij

passwd daweij

chmod 770 /etc/sudoers
vim /etc/sudoers
然后添加:
daweij ALL=(ALL:ALL) ALL

chmod 440 /etc/sudoers

 

su - daweij
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

  

为了使用更便捷,启用 kubectl 命令的自动补全功能。

echo "source <(kubectl completion bash)" >> ~/.bashrc

这样 ubuntu 用户就可以使用 kubectl 了。

安装 Pod 网络

要让 Kubernetes Cluster 能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信。

Kubernetes 支持多种网络方案,这里我们先使用 flannel,后面还会讨论 Canal。

执行如下命令部署 flannel:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

二、Node安装

添加 k8s-node1 和 k8s-node2

在 k8s-node1 和 k8s-node2 上分别执行如下命令,将其注册到 Cluster 中:

kubeadm join --token d38a01.13653e584ccc1980 192.168.56.105:6443

这里的 --token 来自前面 kubeadm init 输出的第 ⑨ 步提示,如果当时没有记录下来可以通过 kubeadm token list 查看。

根据提示,我们可以通过 kubectl get nodes 查看节点的状态。

kubectl get nodes
NAME      STATUS    ROLES         AGE       VERSION
master    Ready     master        33d       v1.9.0+coreos.0
node1     Ready     node          33d       v1.9.0+coreos.0
node2     Ready     node          33d       v1.9.0+coreos.0
node3     Ready     node          33d       v1.9.0+coreos.0
node4     Ready     master,node   33d       v1.9.0+coreos.0

  

目前所有节点都是 NotReady,这是因为每个节点都需要启动若干组件,这些组件都是在 Pod 中运行,需要首先从 google 下载镜像,我们可以通过如下命令查看 Pod 的状态:

kubectl get pod --all-namespaces

root@master:~/kubespray# kubectl get pod --all-namespaces
NAMESPACE     NAME                                    READY     STATUS    RESTARTS   AGE
default       kubernetes-bootcamp-5d7f968ccb-c57nw    1/1       Running   0          2h
default       kubernetes-bootcamp-5d7f968ccb-lv24f    1/1       Running   0          2h
kube-system   calico-node-4gm72                       1/1       Running   52         33d
kube-system   calico-node-8fkfk                       1/1       Running   0          33d
kube-system   calico-node-fqdwj                       1/1       Running   53         33d
kube-system   calico-node-lpdtx                       1/1       Running   47         33d
kube-system   calico-node-nq8l2                       1/1       Running   42         33d
kube-system   kube-apiserver-master                   1/1       Running   0          33d
kube-system   kube-apiserver-node4                    1/1       Running   224        18d
kube-system   kube-controller-manager-master          1/1       Running   0          33d
kube-system   kube-controller-manager-node4           1/1       Running   5          18d
kube-system   kube-dns-79d99cdcd5-6vvrw               3/3       Running   0          18d
kube-system   kube-dns-79d99cdcd5-rkpf2               3/3       Running   0          18d
kube-system   kube-proxy-master                       1/1       Running   0          33d
kube-system   kube-proxy-node1                        1/1       Running   0          32d
kube-system   kube-proxy-node2                        1/1       Running   0          18d
kube-system   kube-proxy-node3                        1/1       Running   0          32d
kube-system   kube-proxy-node4                        1/1       Running   0          18d
kube-system   kube-scheduler-master                   1/1       Running   0          33d
kube-system   kube-scheduler-node4                    1/1       Running   3          18d
kube-system   kubedns-autoscaler-5564b5585f-7z62x     1/1       Running   0          18d
kube-system   kubernetes-dashboard-6bbb86ffc4-zmmc2   1/1       Running   0          18d
kube-system   nginx-proxy-node1                       1/1       Running   0          32d
kube-system   nginx-proxy-node2                       1/1       Running   0          18d
kube-system   nginx-proxy-node3                       1/1       Running   0          32d

  

PendingContainerCreatingImagePullBackOff 都表明 Pod 没有就绪,Running 才是就绪状态。我们可以通过 kubectl describe pod <Pod Name> 查看 Pod 具体情况,比如:

kubectl describe pod calico-node-4gm72 --namespace=kube-system

所有的节点都已经 Ready后,Kubernetes Cluster 创建成功,一切准备就绪。

posted @ 2018-03-07 12:06  Cslc-DaweiJ  阅读(3720)  评论(0编辑  收藏  举报