模块
|
机器
|
配置
|
备注
|
域名
|
---|---|---|---|---|
master | 172.31.101.175 172.31.101.176 172.31.101.177 |
4G内存 4核CPU |
etcd、kube-apiserver、kube-scheduler、kube-controller-manager、flannel | |
node | 172.31.101.172 |
8G内存 |
kubelet、kube-proxy、docker、flannel | |
node | 172.31.101.115 |
32G内存 |
kubelet、kube-proxy、docker、flannel |
master节点能够不安装 docker的,可是须要安装flannel,不然一些转发请求很差使。github
采用CentOS 7系统,线下的yum.repos.d的配置和线上不同,致使安装的一些软件不是最新的。须要作以下操做:docker
独立的数据盘 /data 必须是ext4格式的,不然会有问题json
rpm --
import
https:
//www
.elrepo.org
/RPM-GPG-KEY-elrepo
.org
rpm -Uvh http:
//www
.elrepo.org
/elrepo-release-7
.0-2.el7.elrepo.noarch.rpm
yum -y
install
yum-plugin-fastestmirror
yum -y --enablerepo=elrepo-kernel
install
kernel-ml
grub2-
set
-default 0
|
升级到4.x版本以后,和systemd/kubelet/docker的配合有问题,暂时先回退到3.x后端
cat
/etc/docker/daemon
.json
{
"storage-driver"
:
"overlay"
,
"live-restore"
:
true
,
}
|
# docker相关信息会存储在 /var/lib/docker 下
mv
/var/lib/docker
/data/
ln
-sf
/data/docker
/var/lib/docker
# pod相关信息会存储在 /var/lib/kubelet 下,若是没有这个目录,请先建立
mv
/var/lib/kubelet
/data/
ln
-sf
/data/kubelet
/var/lib/kubelet
|
修改 /etc/sysconfig/docker 文件
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
INSECURE_REGISTRY='--insecure-registry reg.firstshare.cn'
因为master和node之间有频繁的网络操做,并且在内网使用,因此关闭防火墙,避免影响效率
yum -y install etcd,目前版本是3.1.0.
配置参考文档: https://coreos.com/etcd/docs/3.1.4/op-guide/clustering.html
|
位置
|
备注
|
---|---|---|
机器 | 172.31.101.175/176/177 | 至少3台构成一个cluster,经过 http://etcd02.firstshare.cn 访问 |
配置 | /etc/etcd/etcd.conf | |
数据 | /data/etcd-storage | 须要修改成 etcd 帐户可读写 |
服务 | /usr/lib/systemd/system/etcd.service | |
帐户 | etcd | 不用root帐户启动 |
自启动 | systemctl enable etcd | 重启后自动运行etcd |
备份 | ||
监控 |
172.31.101.175
|
172.31.101.176
|
172.31.101.177
|
---|---|---|
ETCD_NAME=vlnx101175 |
ETCD_NAME=vlnx101176 |
ETCD_NAME=vlnx101177 |
运行命令 etcdctl cluster-health 检查是否工做正常
从老的k8s集群172.31.101.119:/key1 目录拷贝证书等文件到全部的master节点的 /etc/kubernetes/ssl/ 目录下。配置说明以下
文件名
|
说明
|
---|---|
basic_auth.csv | basic auth user and password |
ca.crt | Certificate Authority cert |
known_tokens.csv | tokens that entities (e.g. the kubelet) can use to talk to the apiserver |
kubecfg.crt | Client certificate, public key |
kubecfg.key | Client certificate, private key |
server.cert | Server certificate, public key |
server.key | Server certificate, private key |
运行 yum -y install kubernetes-master 命令,目前安装的是1.5.2,咱们先用它把service相关的东西都配置好,而后手动升级到1.6.0的最新版本。
能够经过rpm -ql kubernetes-master 来看都安装了哪些文件
到 /etc/kubernetes/ 目录下修改配置
文件名
|
内容
|
备注
|
---|---|---|
文件名
|
内容
|
备注
|
config | KUBE_LOGTOSTDERR="--logtostderr=true" |
|
apiserver | KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" |
支持ssl/bash/token等安全认证 |
controller-manager | KUBE_CONTROLLER_MANAGER_ARGS="--leader-elect=true \ |
必须设置认证方式,不然建立deploy的时候会报错: |
scheduler | KUBE_SCHEDULER_ARGS="--leader-elect=true \ |
systemctl daemon-reload
systemctl
enable
kube-apiserver
systemctl
enable
kube-scheduler
systemctl
enable
kube-controller-manager
|
systemctl start kube-apiserver
systemctl start kube-scheduler
systemctl start kube-controller-manager
|
运行命令 kubectl get componentstatuses 检查组件是否正常
apiserver 是无状态的,因此对于多个节点而言能够经过前端挡一层 nginx 、haproxy 等实现高可用和负载均衡,而对于 scheduler 和 controller-managere 而言,它们须要操做后端存储 etcd,是有状态的,为了减小同步操做后端存储带来的数据不一致性,3 个 节点 的scheduler 和 controller-manager 组件同时只有一个提供服务,具体的实现就是3个节点之间会进行一个 leader 的选举,只有 leader 节点才提供服务。所以,验证选举工做是否正常也是很是重要的。
查看当前 3 个 shcduler和controller-manager 哪一个是 leader 节点:
kubectl get endpoints kube-controller-manager --namespace=kube-system -o yaml
下载路径:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#downloads-for-v160
到上面路径下载 kubernetes-server-linux-amd64.tar.gz 文件,而后上传到服务器上,解压缩到 /opt/fs/kubernetes 目录,把 bin 目录的文件复制到 系统 /bin/ 目录下。
注意事项:
而后重启master相关服务就能够了
运行 yum -y install kubernetes-node 命令,目前安装的是1.5.2,咱们先用它把service相关的东西都配置好,而后手动升级到1.6.0的最新版本。
yum -y
install
flannel
systemctl daemon-reload
systemctl
enable
flanneld
systemctl start flanneld
|
修改 /etc/sysconfig/flanneld 配置文件,配置etcd的地址
FLANNEL_ETCD_ENDPOINTS="http://172.31.101.175:2379,http://172.31.101.176:2379,http://172.31.101.177:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
在master的机器上,修改etcd设置flannel的网段。 (SubnetLen指定分配给每一个Node节点上Pod网络的掩码位数,从而在网络上间接决定了每一个node上可运行的pod数,参考文档;https://github.com/coreos/flannel/blob/master/Documentation/configuration.md)
etcdctl set /atomic.io/network/config '{ "Network": "10.132.0.0/16","SubnetLen":24 }'
这样每一个node节点上的flanneld启动的时候,会自动分配对应网段的地址并注册到etcd中。
在启动flannel后,每一个node节点的bip范围是自动分配的,不须要再docker的配置文件中指明。
修改docker的配置文件,指明cgroup用systemd
OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false'
if [ -z "${DOCKER_CERT_PATH}" ]; then
DOCKER_CERT_PATH=/etc/docker
fi
INSECURE_REGISTRY='--insecure-registry reg.firstshare.cn'
|
经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡,这是个P2P的虚拟网卡,flanneld服务监听在网卡的另一端。
Flannel经过Etcd服务维护了一张节点间的路由表。
到 /etc/kubernetes/ 目录下修改配置
文件名
|
内容
|
备注
|
---|---|---|
config | KUBE_LOGTOSTDERR="--logtostderr=true" |
不须要配置override-hostname,直接使用本机hostname就能够了 |
kubelet | KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_API_SERVER="--kubeconfig=/var/lib/kubelet/kubeconfig" KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" KUBELET_ARGS="--cgroup-driver=systemd --require-kubeconfig --cluster_dns=10.137.254.254 --cluster_domain=cluster.local" |
必须配置cgroup-driver=systemd,不然没法启动 注释KUBELET_HOSTNAME配置或者修改值为node的真实hostname, 不然master上 kubectl get node只会显示一个127.0.0.1 |
proxy | KUBE_PROXY_ARGS="" | |
kubeconfig | apiVersion: v1 |
/var/lib/kubelet/kubeconfig |
cat /usr/lib/systemd/system/docker.service
cat /usr/lib/systemd/system/kubelet.service
systemctl daemon-reload
systemctl
enable
flanneld
systemctl
enable
docker
systemctl
enable
kube-proxy
systemctl
enable
kubelet
|
systemctl start flanneld
systemctl start docker
systemctl start kube-proxy
systemctl start kubelet
|
下载路径:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#downloads-for-v160
到上面路径下载 kubernetes-server-linux-amd64.tar.gz 文件,而后上传到服务器上,解压缩到 /opt/fs/kubernetes 目录,把 bin 目录的文件复制到 系统 /bin/ 目录下。
注意事项:
而后重启node相关服务就能够了
在 master 节点上,运行命令 kubectl get node ,若是显示node为 NotReady, 则把全部node节点都重启reboot一下才可能恢复正常。
kubernetes 1.6.0 高可靠集群部署 https://www.addops.cn/post/kubernetes-deployment.html
kubernetes + etcd ssl 支持 https://www.addops.cn/post/tls-for-kubernetes-etcd.html
kubernetes 中的服务发现和负载均衡 https://www.addops.cn/post/kubernetes_service_discovery.html
用 Flannel 配置 Kubernetes 网络 http://dockone.io/article/1186
DockOne技术分享(十八):一篇文章带你了解Flannel http://dockone.io/article/618
kubernetes 搭建过程当中遇到的问题 http://www.cnblogs.com/ivictor/p/4998032.html
CentOS 7 禁用ipv6 http://blog.csdn.net/bluishglc/article/details/41390785
和我一块儿一步步搭建k8s集群 https://github.com/opsnull/follow-me-install-kubernetes-cluster