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
Comments | NOTHING