本次选用一个master节点,三个node节点来安装k8s集群。 node
节点 | IP |
---|---|
M0 | 10.xx.xx.xx |
N0 | 10.xx.xx.xx |
N1 | 10.xx.xx.xx |
N2 | 10.xx.xx.xx |
包括修改主机名,关闭防火墙等操做。
k8s集群会识别主机名字,确保每一个主机名设为不一样值。
关闭防火墙是为了不没必要要的网络问题。 linux
# ${hostname}变量请替换成规划的主机名,好比M0, N0, N1 sudo hostnamectl set-hostname ${hostname} systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i -re '/^\s*SELINUX=/s/^/#/' -e '$i\\SELINUX=disabled' /etc/selinux/config
ssh-copy-id
命令,也能够本身添加认证。这个网上教程不少,本身搜一下 yum install docker -y systemctl enable docker && systemctl start docker
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF yum install -y kubelet kubeadm kubectl
官网文档上写一些用户在RHEL/Centos7系统上安装时,因为iptables被绕过致使路由错误,须要在
sysctl的config文件中将net.bridge.bridge-nf-call-iptables设置为1.docker
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system
启动kubelet:api
systemctl enable kubelet && systemctl start kubelet
至此,准备工做就作好了。目前每隔几秒kubelet就会重启,直到收到kubeadm的命令。
因此用systemctl status kubelet
看到kubelet没有启动是正常现象,能够多执行几回查看,就会发现kubelet处于不断中止和重启的状态.安全
kubeadm是k8s官方提供的工具,能够简单的建立一个安全可扩展的k8s集群。
在执行下面的操做以前,请确保前面的准备工做已经作完。特别是kubelet已经安装和启动,kubeadm已经安装完成网络
启动master
在master节点执行如下操做,并导出KUBECONFIG配置文件到环境变量:
记录下kubeadm init的输出信息,后面将会用到app
# --pod-network-cidr=192.168.0.0/1参数是为了后面启动networ的Calico pod作准备 kubeadm init --pod-network-cidr=192.168.0.0/16 export KUBECONFIG=/etc/kubernetes/admin.conf
安装启动一个network的pod,这里选用Calico.
在启动任何pod以前,必须先启动一个network的pod, 用于pod之间的通讯 ssh
kubectl apply -f https://docs.projectcalico.org/v2.6/getting- started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
添加node节点到master(在每台node上执行如下命令)
当执行玩kubeadm init
后会输出如下信息,直接复制执行就能够了 ide
kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert- hash sha256:<hash>
至此为止k8s集群就建好了,能够在master节点输出kubectl get nodes
查看工具
在非master节点管理集群(可选)
若是不执行这个操做,只能在master节点来管理集群。
把master节点的admin.conf配置文件复制到nodes节点当中去,就能在node节点来管理集群了。
scp /etc/kubernetes/admin.conf root@10.5.30.82:/etc/kubernetes/ export KUBECONFIG=/etc/kubernetes/admin.conf
将API服务代理到localhost(可选)
这个很好理解,执行 kubectl --kubeconfig proxy
命令,也是要使用admin.conf
的权限,直接复
制官方文档:
if you want to connect to the API Server from outside the cluster you can use
kubectl proxy:
scp root@<master ip>:/etc/kubernetes/admin.conf . kubectl --kubeconfig ./admin.conf proxy
You can now access the API Server locally at http://localhost:8001/api/v1
在咱们安装k8s集群时,可能会出现问题,须要从新安装。
在咱们从新执行安装步骤以前,必需要先销毁咱们创建好的k8s集群,在master节点下执行如下命令。
# 先移除集群的node节点 kubectl drain <node name> --delete-local-data --force --ignore-daemonsets kubectl delete node <node name> # 而后重置kubeadm状态 kubeadm reset
我彻底按照官方文档安装执行,没有遇到问题. 若是你在安装过程当中遇到问题,请参考下面官方的故障排除文档和安装文档。
故障排除:Troubleshooting Kubeadm
安装文档:Using kubeadm to create a cluster