深入学习Kubernetes(三):手工安装Kubernetes
由于Kubernetes还在不断的演进,不同版本的k8s,在某些命令会有出入,不过原理变化不大,本文安装的Kubernetes版本为 V1.3.0。
解压后,我们需要使用到的服务程序文件位于: kubernetes/server/kubernetes/server/bin 下
下面我们把安装步骤分为Master和Minion两部分,最后在统一进行验证。
环境准备
为了达到简单的集群安装,我们先准备了两台服务器,如果要扩展minion,安装方式都是一样的,所以扩展比较方便。
master server : 192.168.139.145
minion server : 192.168.139.146
我们的安装过程中,均使用centos的Systemd系统服务,进行Kubernetes服务的配置。
Centos7 默认使用firewall为防火墙,我们先关闭防火墙的设定
$ systemctl disable firewalld.service
$ systemctl stop firewalld.service
Master节点上安装
Master上需要具备的K8s程序组件是
- etcd
- kube-apiserver
- kube-controller-manager
- kube-scheduler
安装etcd
先下载最新的etcd并解压:
$ wget https://github.com/coreos/etcd/releases/download/v3.1.3/etcd-v3.1.3-darwin-amd64.zip
创建相关的工作目录:
$ mkdir /var/lib/etcd/
$ mkdir /etc/etcd && touch etcd.conf
创建etcd的服务文件:
$ vim /usr/lib/systemd/system/etcd.service
相关内容如下:
[Unit]
Description=Etcd Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd
[Install]
WantedBy=multi-user.target
其中 /etc/etcd/etcd.conf 为etcd的配置文件,内容可以为空,我们介绍默认的配置
接下来,我们启动etcd的服务
$ systemctl daemon-reload
$ systemctl enable etcd.service
$ systemctl status etcd //检查etcd的运行状态
检查健康:
$ etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379
cluster is healthy
安装 kube-apiserver
我们先创建服务的日志目录
$ mkdir -p /var/log/kubernetes
进入 kubernetes/server/kubernetes/server/bin,把相关程序文件复制到 /usr/bin下
$ cp kube-apiserver /usr/bin/
编辑systemd服务文件
$ vim /usr/lib/systemd/system/kube-apiserver.service
内容如下:
[Unit]
Description=Kubernetes API Server
After=etcd.service
Wants=etcd.service
[Service]
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
创建 apiserver 配置文件
mkdir -p /etc/kubernetes && touch /etc/kubernetes/apiserver
配置文件 /etc/kubernetes/apiserver 的内容包括了 kube-apiserver的全部启动参数,只有的配置参数在变量KUBE_API_ARGS中指定,相关内容如下:
$ vim /etc/kubernetes/apiserver
KUBE_API_ARGS="--etcd_servers=http://127.0.0.1:2379
--insecure-bind-address=0.0.0.0 --insecure-port=8080
--service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535
--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota
--logtostderr=false --log-dir=/var/log/kubernetes --v=2"
相关的参数说明可以参考 https://kubernetes.io/docs/admin/kube-apiserver/
安装 kube-controller-manager
kube-controller-manager 服务依赖于 kube-apiserver服务。
跟apiserver一样,我们需要把程序文件复制到 /usr/bin/
cp kube-controller-manager /usr/bin/
编辑systemd的服务文件
$ vim /usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
创建并编辑配置文件
$ vim /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--master=http://192.168.139.145:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
配置参数可以参考 https://kubernetes.io/docs/admin/kube-controller-manager/
安装 kube-scheduler
跟apiserver一样,我们需要把程序文件复制到 /usr/bin/
cd kubernetes/server/kubernetes/server/bin
cp kube-scheduler /usr/bin/
编辑systemd的服务文件
$ vim /usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
编辑配置文件,主要配置 KUBE_SCHEDULER_ARGS
环境变量
$ vim /etc/kubernetes/scheduler
KUBE_SCHEDULER_ARGS="--master=http://192.168.139.145:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
小结
完成上面的Master节点安装配置后,我们执行systemctl start 命令这3个服务。同时使用 systemctl enable 命令将服务加入开机启动列表中
$ systemctl daemon-reload
$ systemctl enable kube-apiserver.service
$ systemctl start kube-apiserver.service
$ systemctl enable kube-controller-manager.service
$ systemctl start kube-controller-manager.service
$ systemctl enable kube-scheduler.service
$ systemctl start kube-scheduler.service
通过 syetem status 命令来验证服务的启动状态,”running”表示启动成功。到此,Master上所需的服务就全部启动完成。
Minion节点安装
Minion上需要具备的K8s程序组件是
- docker engine
- kubelet
- kube-proxy
关闭防火墙服务
$ systemctl disable firewalld.service
$ systemctl stop firewalld.service
安装Docker
$ systemctl start docker
切换docker镜像源:
可以参考 https://www.daocloud.io/mirror#accelerator-doc
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://dbe35452.m.daocloud.io
重启docker后台服务
$ systemctl restart docker
安装 kubectl
创建日志目录:
$ mkdir -p /var/log/kubernetes
复制程序文件
$ cp kubelet /usr/bin/
创建工作目录:
$ mkdir -p /var/lib/kubelet
kubectl服务依赖docker服务。
编辑服务文件
$ vim /usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet Server
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet $KUBELET_ARGS
Restart=on-failure
[Install]
WantedBy=multi-user.target
接下来,我们依旧针对环境变量 KUBELET_ARGS,编辑配置文件
$ vim /etc/kubernetes/kubelet
KUBELET_ARGS="--api-servers=http://192.168.139.145:8080 --hostname-override=192.168.139.146 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
安装 kube-proxy
复制程序文件
$ cp kube-proxy /usr/bin/
编辑服务文件
[Unit]
Description=Kubernetes Kube Proxy Server
After=network.target
Requires=network.service
[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
针对 KUBE_PROXY_ARGS,编辑配置文件
$ vim /etc/kubernetes/proxy
KUBE_PROXY_ARGS="--master=http://192.168.139.145:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
配置完成后,通过syetemctl 启动kubelet和kube-proxy服务
systemctl daemon-reload
systemctl enable kubelet.service
systemctl start kubelet.service
systemctl enable kube-proxy.service
systemctl start kube-proxy.service
总结
kubelet默认采用向Master自动注册本Node的机制,在Master上查看各Node的状态,状态为Ready表示Node已经成功注册并状态为可用
我们在Master
上,执行一下命令,查看它的工作节点:
$ kubectl get nodes
NAME STATUS AGE
192.168.139.146 Ready 4m