Kubernetes集群安装 (一)


Kubernetes集群安装

准备工作

确认所有防火墙与 SELinux 已关闭

systemctl stop firewalld && systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
##
SELINUX=disabled

Kubernetes v1.8+ 要求关闭系统 Swap

swapoff -a && sysctl -w vm.swappiness=0

更改主机名,分别设置Master和Node的主机名

hostnamectl set-hostname k8s-master
reboot 

以二进制方式安装

1.下载Server Binaries中的kubernetes-server-liunx-amd64.tar.gz文件,其中包含Kubernetes需要运行的全部服务程序文件

wget -c https://dl.k8s.io/v1.10.4/kubernetes-server-linux-amd64.tar.gz

2.解压

tar -zxvf kubernetes-server-linux-amd64.tar.gz

3.Master上安装etcd、kube-apiserver、kube-controller-manager、kube-scheduler服务

1.)etcd服务安装

下载

 wget -c https://github.com/coreos/etcd/releases/download/v3.3.7/etcd-v3.3.7-linux-amd64.tar.gz

解压

tar -zxvf etcd-v3.3.7-linux-amd64.tar.gz 

将etcd和etcdctl文件复制到/usr/bin目录

cp etcd-v3.3.7-linux-amd64/{etcd,etcdctl} /usr/bin

设置systemd服务文件/usr/lib/systemd/system/etcd.service

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

其中WorkingDirectory(/var/lib/etcd/)表示etcd数据保存的目录,需要在启动etcd服务之前进行创建

创建配置文件/etc/etcd/etcd.conf

cd /etc
mkdir etcd
vim /etc/etcd/etcd.conf

编辑配置文件

ETCD_NAME=ETCD Server
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_NAME=ETCD Server
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://115.28.85.91:2379"

配置文件/etc/etcd/etcd.conf通常不需要特别的参数设置,etcd默认将监听在http://127.0.0.1:2379地址供客户端连接

启动服务

systemctl daemon-reload
systemctl enable etcd.service
systemctl start etcd.service

验证etcd是否正确启动

etcdctl cluster-health

2.)kube-apiserver服务安装

将kube-apiserver、kube-controller-manager、kube-scheduler文件复制到/usr/bin目录

cp kubernetes/server/bin/{kube-apiserver,kube-controller-manager,kube-scheduler} /usr/bin/

编辑systemd服务文件/usr/lib/systemd/system/kube-apiserver.service

vim /usr/lib/systemd/system/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
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

配置文件/etc/kubernetes/apiserver的内容包括了kube-apiserver的全部启动参数,主要的配置参数在变量KUBE_API_ARGS中指定

mkdir /etc/kubernetes
touch /etc/kubernetes/apiserver
vim /etc/kubernetes/apiserver
#
KUBE_API_ARGS="--storage-backend=etcd3 --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,ServiceAccount,DefaultStorageClass,ResourceQuota --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

对启动参数的说明如下:

--etcd-servers:指定etcd服务的url

--storage-backend:指定etcd的版本,从kubernetes v1.6开始,默认为etcd3。注意,在kubernetes v1.6之前的版本中没有这个参数,kube-apiserver默认使用etcd2,对于正在运行的v1.5或旧版本的kubernetes集群,etcd提供了数据升级方案

--insecure-bind-address: apiserver绑定主机的非安全IP地址,设置0.0.0.0表示绑定所有IP地址

--insecure-port:apiserver 绑定主机的非安全端口,默认为8080

--service-cluster-ip-range:kubernetes集群中service的虚拟IP地址段范围,以CIDR格式表示,例如169.169.0.0/16 该IP范围不能与物理机的真是IP段有重合

--service-node-port-range:kubernetes集群中service可映射的物理机端口号范围,默认为30000~32767

--admission_control:kubernetes集群的准入控制设置,各控制模块以插件的形式依次生效

--logtostderr:设置为false表示将日志写入文件,不写入stderr

--log-dir:日志目录

--v : 日志级别

3.)kube-controller-manager服务

kube-controller-manager 服务依赖于kube-apiserver服务

vim /usr/lib/systemd/system/kube-controller-manager.service
#
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
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

编辑配置文件,配置文件/etc/kubernetes/controller-manager的内容包含了kube-controller-manager 的全部启动参数,主要的配置参数在变量KUBE_CONTROLLER_MANAGER_ARGS中指定

vim /etc/kubernetes/controller-manager
#
KUBE_CONTROLLER_MANAGER_ARGS="--master=http://115.28.85.91:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

启动参数说明如下:

--master:指定apiserver的url地址

--logtostderr:设置为false表示将日志写入文件,不写入stderr

--log-dir:日志目录

--v:日志级别

4.)安装kube-scheduler服务

kube-scheduler服务也依赖于api-server服务

配置服务文件

vim /usr/lib/systemd/system/kube-scheduler.service
#
[Unit]
Description=Kubernetes Scheduler
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
User=root
EnvironmentFile=/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

编辑配置文件,配置文件/etc/kubernetes/scheduler的内容包括了kube-scheduler的全部启动参数,主要的配置参数在变量KUBE_SCHEDULER_ARGS中指定:

vim /etc/kubernetes/scheduler
#
KUBE_SCHEDULER_ARGS="--master=http://115.28.85.91:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

启动参数说明如下:

--master:指定apiserver的url地址

--logtostderr:设置为false表示将日志写入文件,不写入stderr

--log-dir:日志目录

--v:日志级别

5.)启动服务

配置完成后,执行systemctl start 命令按顺序启动这3个服务,同时,使用systemctl enable 命令将服务加入开机启动列表中

systemctl daemon-reload
systemctl enable kube-apiserver.service
systemctl start kube-apiserver.service
systemctl enable kube-controller-manager
systemctl start kube-controller-manager
systemctl enable kube-scheduler
systemctl start kube-scheduler

4.Node节点上安装kubelet、kube-proxy服务

在工作Node节点上需要预先安装好Docker Daemon并且正常启动。

1.)安装Docker

参考Docker安装指南

2.)下载kubernetes

下载、解压步骤参考Master

3.)拷贝服务文件,将kubelet、kube-proxy拷贝到目录/usr/bin

cd /kubernetes/server/bin
cp ./{kubelet,kube-proxy} /usr/bin

4.)安装kubelet服务

vim /usr/lib/systemd/system/kubelet.service
##
[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
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数据目录
mkdir /var/lib/kubelet

其中WorkingDirectory表示kubelet保存数据的目录,需要在启动之前进行创建

配置文件,配置文件/etc/kubernetes/kubelet的内容包括了kubelet的全部启动参数,主要的配置参数在变量KUBELET_ARGS中指定

mkdir /etc/kubernetes
vim /etc/kubernetes/kubelet
##
KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubelet.yaml --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
> 编辑
vim /etc/kubernetes/kubelet.yaml
##
apiVersion: v1
kind: Config
clusters:
-  name: local
-  cluster:
      server: http://115.28.85.91:8080
users:
-  name: kubelet
contexts:
-  context: 
     cluster: local
     user: kubelet
-   name: kubelet-context
current-context: kubelet-context

启动参数说明

--api-servers:指定apiserver的URL地址,可以指定多个

--logtostderr:设置为false表示将日志写入文件,不写入stderr

--log-dir:日志目录

--v:日志级别

5.)安装kube-proxy服务

kube-proxy服务依赖于network服务

vim /usr/lib/systemd/system/kube-proxy.service
##
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
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

配置文件/etc/kubernetes/proxy的内容包含了kube-proxy的全部启动参数,主要的配置参数在变量KUBE_PROXY_ARGS中指定:

vim /etc/kubernetes/proxy
##
KUBE_PROXY_ARGS="--master=http://115.28.85.91:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

启动参数说明

--master:指定apiserver的URL地址

--logtostderr:设置为false表示将日志写入文件,不写入stderr

--log-dir:日志目录

--v:日志级别

6.)启动服务

systemctl daemon-reload
systemctl enable kubelet.service
systemctl start kubelet.service
systemctl enable kube-proxy
systemctl start kube-proxy

注意:

在Master节点上开启8080端口的访问权限

7.)验证

拷贝kubectl到/usr/local/bin目录下

cp kubectl /usr/local/bin/

获取集群状态

kubectl get nodes

声明:初心|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Kubernetes集群安装 (一)


愿你勿忘初心,并从始至终