搭建环境:
阿里云服务器:Centos7 1核 1G (作为master)
阿里云服务器:Centos7 1核 2G (作为节点)
腾讯云服务器:Centos7 1核 1G (作为节点)
Master安装及配置
必要的服务:etcd、kube-apiserver、kube-controller-manager、kube-scheduler
安装
yum install -y etcd kubernetes
不出意外的话,此时ectd、kubernetes、docker已经安装完成。由于kubernetes的master与节点间会大量的通信,需要配置组件间相互通信的端口号,内网下直接关闭防火墙即可:
systemctl disable firewalld
systemctl stop firewalld
etcd
ectd作为Kubernetes集群的主数据库,早安装Kubernetes各服务前需要优先安装和启动。设置systemd服务文件
cat /usr/lib/systemd/system/etcd/etcd.service
输出如下:
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
User=etcd
# set GOMAXPROCS to number of processors
ExecStart=/usr/bin/etcd
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
其中,WorkingDirectory表示etcd数据保存目录,EnvironmentFile表示etcd配置文件,此文件不需要做改动,可以查看它进行了解:
cat /etc/etcd/etcd.conf
ectd默认监听在127.0.0.1:2379(localhost:2379)地址供客户端连接,配置完成后,启动服务:
systemctl daemon-reload
systemctl start etcd.service
验证ectd是否正确启动:
ectdctl cluster-health
输出:
member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379
cluster is healthy
如上面输出cluster is healthy则表示正确启动。
kube-apiserver
编辑systemd服务文件:/usr/lib/systemd/system/kube-apiserver.service
EnvironmentFile=-/etc/kubernetes/apiserver
User=kube
ExecStart=/usr/bin/kube-apiserver \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBE_ETCD_SERVERS \
$KUBE_API_ADDRESS \
$KUBE_API_PORT \
$KUBELET_PORT \
$KUBE_ALLOW_PRIV \
$KUBE_SERVICE_ADDRESSES \
$KUBE_ADMISSION_CONTROL \
$KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
查看上面展示的EnvironmentFile项(环境配置文件),那么显然后面紧跟的路径/etc/kubernetes/apiserver就是环境配置文件了,如下:
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# KUBE_API_PORT="--insecure-port=8080"
# KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
KUBE_API_ARGS=""
解释:
KUBE_API_ADDRESS:服务监听地址,后面的值表示绑定主机的所有IP地址。
KUBE_API_PORT:服务在哪个端口进行监听
KUBE_ETCD_SERVERS:etcd服务URL
KUBE_SERVICE_ADDRESSES:使用此服务的地址范围,值表示Kubernetes集群中Service的虚拟IP地址段范围。
KUBE_ADMISSION_CONTROL:Kubernetes集群的准入控制设置,各模块以插件形式依次生效。
kube-controller-manager、kube-scheduler
同上面的方式可以对对应的配置文件进行修改,当然其实我们并没对他们进行什么修改,只是为了对配置文件更加理解。下面是对应配置文件位置:
/usr/lib/systemd/system/kube-controller-manager.service
/etc/kubernetes/controller-manager
/usr/lib/systemd/system/kube-scheduler.service
/etc/kubernetes/scheduler
启动
顺序启动这些服务:
systemctl daemon-reload
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
查看服务是否启动成功:
systemctl status <service name>
例子:
systemctl status etcd
到此,master所需服务全部启动完成。
Node安装配置
node上的服务:kubelet、kube-proxy,安装:
yum install kubernetes
启动docker:
docker -d -H unix:///var/run/docker.sock -H 0.0.0.0:2375 >> /var/log/docker.log 2>&1 &
kubelet
配置如下(/etc/kubernetes/kubelet):
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=这里填写node的名称,任意"
KUBELET_API_SERVER="--api-servers=http://这里填写master的ip:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
启动kubelet:
systemctl start kubelet
kube-proxy
配置如下(/etc/kubernetes/proxy):
KUBE_PROXY_ARGS="--master=http://这里填写master的ip:8080 --proxy-mode=iptables --logtostderr=true"
启动kube-proxy:
systemctl start kube-proxy
这些服务若启动成功且正常那么就成功了,那么怎样查看服务启动状态呢:
systemctl status <server name>
例子:
systemctl status kube-proxy
在上面命令输出中查看是否出错等…
接下来在master中查看node是否连接:
kubectl get nodes
若上诉命令输出是下面这样的,那么恭喜!
NAME STATUS AGE
...