# 1、初始化Master Kubeadm已经被安装到这个节点上了。这个安装包对Ubuntu16.04+,Centos7或HypriotOS v1.01+可用。 初始化集群的第一阶段就是启动master节点。master节点是负责运行控制平台(control plane)组件,etcd和API server的。客户端通过Master API来调度工作负载管理集群状态。 ## Task 下面的命令通过一个已知的token来初始化集群,以简化以下步骤。 ``` kubeadm init --token=102952.1a7dd4cc8d1f4cc5 --kubernetes-version $(kubeadm version -o short) ``` 在生产中,建议您排除这个token,因为kubeadm会代表你生成一个。 为了管理这个K8s集群,需要客户端配置和证书。这个配置在kubeadm初始化集群的时候会自动生成。下面的命令拷贝配置到用户的家目录并且设置这个环境变量以便使用命令行工具(CLI)。 ``` sudo cp /etc/kubernetes/admin.conf $HOME/ sudo chown $(id -u):$(id -g) $HOME/admin.conf export KUBECONFIG=$HOME/admin.conf ``` # 2、部署容器网络接口(CNI) CNI定义了如何连接不同的节点和对应的工作负载。这里有多个网络插件可用。 Task 在这节中我们将会使用WeaveWorks,对应的部署定义文件在目录 (这一步实践中发现 文件名叫/opt/weave-kube.yaml) ``` cat /opt/weave-kube.yml ``` 使用kubectl apply命令进行部署 ``` kubectl apply -f /opt/weave-kube.yml ``` Weave将会部署一系列的Pods在集群中。查看部署状态可使用命令 ``` kubectl get pod -n kube-system ``` 当部署Weave在你的集群中,访问 [https://www.weave.works/docs/net/latest/kube-addon](https://www.weave.works/docs/net/latest/kube-addon) 获取更多详细信息。 3、加入集群 一旦Master和CNI已经被初始化了,其他的节点只要他们使用正确的token就可以加入集群。使用命令查看这个token: ``` kubeadm token list ```` ## Task 在第二个节点上,运行下面的命令加入集群通过使用主节点的IP地址 ``` kubeadm join --discovery-token-unsafe-skip-ca-verification --token=102952 .1a7dd4cc8d1f4cc5 172.17.0.51:6443 ``` 这是主程序初始化后提供的相同命令。 **--discovery-token-unsafe-skip-ca-verification** 是用来跳过Discovery Token验证的。由于这个token是动态生成的,所以我们在这步不能包含它。当我们在生产中,使用kubeadm init提供的token。 # 4、查看节点 集群现在已经被初始化了。Master节点会管理这个集群,同时我们的一个工作节点将会运行我们的容器负载。 ## Task K8s CLI,就是kubectl,现在可以使用配置来访问集群了。例如,下面的命令将会返回我们集群中的这两个节点。 ``` kubectl get nodes ``` # 5、部署Pod 集群中的这两个节点现在应该是Ready的状态。这代表我们的部署可以被调度和启动了。 使用Kubectl,可以部署pods。每个节点执行工作负载的命令总是有Master发出。 下面的命令创建一个基于Docker镜像katacoda/docker-http-server的pod。 ``` kubectl create deployment http --image=katacoda/docker-http-server:latest ``` Pod创建的状态可以使用命令查看: ``` kubectl get pods ``` 一旦运行,你可以查看Docker容器在节点的运行情况。 ``` docker ps | grep docker-http-server ``` # 6、部署Dashboard K8s有一个基于Web的Dashboard UI,可视化展示集群。 ## Task 部署dashboard使用下面的命令: ``` kubectl apply -f dashboard.yaml ``` dashboard 是被部署到kube-system命名空间下的,查看部署状态使用命令: ``` kubectl get pods -n kube-system ``` 登录时需要一个ServiceAccount。一个ClusterRoleBinding被用来分配一个新的ServiceAccount(admin-user)给集群管理员角色。 ``` cat <<EOF | kubectl create -f - apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kube-system EOF ``` 这意味着他们可以控制K8s的各个方面。通过ClusterRoleBinding和RBAC(基于角色的访问控制),根据安全需求不同层次的权限可以被定义了。为Dashboard创建一个用户的更多信息可以查询Dashboard文档。 一旦ServiceAccount被创建了,登录的token可以找到: ``` kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}') ``` 当dashboard被部署好了,他使用外部IP绑定到8443端口的Service上。dashboard在集群外就可以被访问到[https://2886795330-8443-elsy02.environments.katacoda.com/](https://2886795330-8443-elsy02.environments.katacoda.com/) 使用admin-user的token来访问dashboard。 在生产中,不是使用外部IP,更推荐使用kubectl proxy来访问dashboard,查看更多详细信息访问[https://github.com/kubernetes/dashboard](https://github.com/kubernetes/dashboard).