关闭swap
执行swapoff
临时关闭swap。
重启后会失效,若要永久关闭,可以编辑/etc/fstab
文件,将其中swap分区一行注释掉
1 |
|
安装配置docker
可以参考官方安装文档
1. 安装docker
1 |
|
2. docker配置
创建文件/etc/docker/daemon.json
, 写入下面的内容。
1 |
|
若在国内部署,可以使用国内的docker源加快拉取速度,/etc/docker/daemon.json
中加入国内源。
1 |
|
3. 重启docker
1 |
|
安装kubeadm, kubelet和kubectl
1. 添加yum仓库
如果节点在国内,可以使用国内镜像仓库,这里使用了阿里云的,创建/etc/yum.repos.d/kubernetes.repo
,文件如下内容
1 |
|
如果在国外,可以使用谷歌官方镜像仓库,文件内容如下
1 |
|
2. 关闭SELinux
kubelet不支持SELinux, 这里需要将SELinux设置为permissive
模式
1 |
|
3. 安装 kubelet, kubectl和kubeadm
1 |
|
4. 配置sysctl
在RHEL/CentOS 7上由于 iptables 被绕过导致网络请求被错误的路由。您得保证 在您的 sysctl 配置中 net.bridge.bridge-nf-call-iptables 被设为1。
创建文件/etc/sysctl.d/k8s.conf
, 文件内容如下
1 |
|
执行sysctl --system
使配置生效
5. 拉取镜像
如果节点在国外,可以跳过这一步。
执行kubeadm config images pull
查看到gcr.io的连接,如果拉取成功可以进入下一步。
如果失败,说明无法访问gcr.io。这时需要手动拉取镜像,可以执行下面的脚本,从阿里云拉取相应镜像。
1 |
|
也可以在国外的vps上拉取相应的镜像,执行docker save
保存为tar文件,复制到需要的节点上,docker load
加载,然后通过docker tag
恢复镜像的tag。
执行
kubeadm config images list
可以查看所需镜像
安装pod网络插件
这里使用flannel
1 |
|
初始化集群的master
1. kubeadm init初始化
可以先通过kubeadm config images pull
确认镜像拉取成功。
通过kubeadm init <args>
初始化。由于这里使用了flannel作为网络插件,在初始化时需要加入--pod-network-cidr=10.244.0.0/16
指定网络。如果不适用默认的
1 |
|
初始化成功后,会输出下面的信息
1 |
|
注意这里最后一行的
kubeadm join .....
,在其他节点执行此行命令,使节点加入到集群中。
如果使用非root账户操作kubectl,则需执行如下命令
1 |
|
2. 部署flannel
1 |
|
通过kubectl get nodes
查看节点,如果看到master
节点表示安装成功。
1 |
|
将其他节点加入到集群中
只有master需要执行kubeadm init
初始化,其他node节点通过执行kubeadm join
加入到集群中
命令及参数采用kubeadm init
时的输出,示例如下
1 |
|
这里的toke有效期只有24小时,如果过期在master上执行kubeadm create token
创建新的token。
执行kubectl get nodes
查看node节点
1 |
|
集群中的master和node节点的hostname不能重复,否则会加入集群失败。 如果重复,可以通过
hostnamectl set-hostname NAME
修改节点的hostname
安装Web界面(可选)
安装kuberenets-dashboard后可以通过浏览器查看/更改集群
1. 拉取镜像
和前述相同,需要node节点拉取下面几个镜像。国内节点需要从阿里云拉取或者从国外节点拉取后传到节点再加载
1 |
|
2. 部署dashboard
获取yaml配置文件
1 |
|
kubernetes-dashboard默认需要通过kubectl proxy
来访问,但是这时使用的是HTTP,在HTTP下访问dashboard时即使登录成功,也会卡在登录页面。可以选择让dashboard直接监听外部端口,不经过kubectl proxy
的代理。
为此可以在kubernets-dashboard.yaml最后一栏,Dashboard Service
中,增加了type: NodePort
和nodePort: 30001
,更改后的结果如下所示。(这里30001端口也可以更改)
1 |
|
通过kubectl部署dashboard
1 |
|
访问https://nodeIP:30001
,出现登录界面表示成功。这里的证书不被浏览器信任,chrome无法访问的话,可以用firefox打开。
3. 创建admin用户来访问dashboard
这里为了简单,创建了一个admin账户用来登录
新建文件dashboard-adminuser.yaml
,内容如下
1 |
|
在master上执行kubectl apply -f dashboard-adminuser.yaml
创建admin用户及role绑定。
获取token
1 |
|
输出如下所示
1 |
|
在dashboard登录界面,选择令牌,将上面输出的token粘贴到输入框,点击登录就可以已admin登入。
常见问题
- node节点
kubeadm join
成功,master上看不到
可以查看node节点的hostname是否于集群内其他节点重复,重复的话通过hostnamectl修改
- node节点一直处于NotReady状态
查看节点是否安装了flannel,没有需要安装。
通过systemctl status kubelet查看运行日志中的错误信息。
1 |
|
类似上面的报错,应该是flannel没有安装或者找不到flannel的配置,可以手动将master的/etc/cni/net.d/10-flannel.conflist
文件手动复制到node节点相应目录下。如果拉取镜像失败,则可以手动拉取。
- dashboard卡在登录界面
确保浏览器通过https访问dashboard。
- token过期导致kubeadm join时失败
执行kubeadm join时报错如下。
1 |
|
这是因为kubeadm生成的token默认24小时过期,在master上执行kubeadm token create
创建新的token,替换kubeadm join --token XXX
中的token即可