离线环境下使用二进制方式安装配置Kubernetes集群(三)

一、安装方式介绍

1、yum 安装

目前CentOS官方已经把Kubernetes源放入到自己的默认 extras 仓库里面,使用 yum 安装,好处是简单,坏处也很明显,需要官方更新 yum 源才能获得最新版本的软件,而所有软件的依赖又不能自己指定,尤其是你的操作系统版本如果低的话,使用 yum 源安装的 Kubernetes 的版本也会受到限制,通常会低于官方很多版本,我安装的时候目前官方版本为1.12,而 yum 源中的版本为1.5.2

2、二进制安装

使用二进制文件安装,好处是可以安装任意版本的 Kubernetes,对一些新版本新功能追求的同学比较合适,坏处是配置比较复杂,很多软件包因为一些原因,我们在大陆是访问不到的。

3、Kubeadm 安装

kubeadm 是 Kubernetes 官方提供的用于快速安装 Kubernetes 集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验 kubeadm 可以学习到 Kubernetes 官方在集群配置上一些新的最佳实践。

这里我们选用第二种方式安装。

二、环境准备

1、软件版本

我们安装的版本基本是目前最新的版本。

软件 版本
kubernetes v1.12
CentOS 7.5 CentOS Linux release 7.5.1804
Docker v18.09,推荐使用v18.06,这是官方推荐的
etcd 3.3.10
flannel 0.10.0

2、节点规划

IP 角色 主机名
172.18.8.200 k8s master master.wzlinux.com
172.18.8.201 k8s node01 node01.wzlinux.com
172.18.8.202 k8s node02 node02.wzlinux.com

节点及网络规划如下:
离线环境下使用二进制方式安装配置Kubernetes集群(三)

3、系统配置

关闭防火墙。

systemctl stop firewalld
systemctl disable firewalld

配置/etc/hosts,添加如下内容。

172.18.8.200 master.wzlinux.com master
172.18.8.201 node01.wzlinux.com node01
172.18.8.202 node02.wzlinux.com node02

关闭SELinux。

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
setenforce 0

关闭swap。

swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

配置转发参数。

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

4、二进制软件包下载

我们可以下载编译好的二进制文件,也可以下载源码自己编译,这里只讨论二进制的安装方式。在Kubernetes的Github CHANGELOG日志中可以看到最新的版本号,也可以到Tag页面中找到自己需要的版本,我下载的是 V1.12.2

上传我们下载的二进制软件包到各节点,并解压在root家目录,查看目录内容。

[root@master ~]# ll kubernetes/server/bin/
total 1821524
-rwxr-xr-x 1 root root  60859975 Oct 24 15:49 apiextensions-apiserver
-rwxr-xr-x 1 root root 142923436 Oct 24 15:49 cloud-controller-manager
-rw-r--r-- 1 root root         8 Oct 24 15:44 cloud-controller-manager.docker_tag
-rw-r--r-- 1 root root 144309760 Oct 24 15:44 cloud-controller-manager.tar
-rwxr-xr-x 1 root root 248021112 Oct 24 15:49 hyperkube
-rwxr-xr-x 1 root root  54042644 Oct 24 15:49 kubeadm
-rwxr-xr-x 1 root root 192781649 Oct 24 15:49 kube-apiserver
-rw-r--r-- 1 root root         8 Oct 24 15:44 kube-apiserver.docker_tag
-rw-r--r-- 1 root root 194167808 Oct 24 15:44 kube-apiserver.tar
-rwxr-xr-x 1 root root 162961401 Oct 24 15:49 kube-controller-manager
-rw-r--r-- 1 root root         8 Oct 24 15:44 kube-controller-manager.docker_tag
-rw-r--r-- 1 root root 164347392 Oct 24 15:44 kube-controller-manager.tar
-rwxr-xr-x 1 root root  57352138 Oct 24 15:49 kubectl
-rwxr-xr-x 1 root root 176648680 Oct 24 15:49 kubelet
-rwxr-xr-x 1 root root  50330867 Oct 24 15:49 kube-proxy
-rw-r--r-- 1 root root         8 Oct 24 15:44 kube-proxy.docker_tag
-rw-r--r-- 1 root root  98355200 Oct 24 15:44 kube-proxy.tar
-rwxr-xr-x 1 root root  57184656 Oct 24 15:49 kube-scheduler
-rw-r--r-- 1 root root         8 Oct 24 15:44 kube-scheduler.docker_tag
-rw-r--r-- 1 root root  58570752 Oct 24 15:44 kube-scheduler.tar
-rwxr-xr-x 1 root root   2330265 Oct 24 15:49 mounter

这些包都是存储在google的服务器上面,因为众所周知的原因,我们是无法访问的,所以需要各位科学上网才可以获取,不过我可以把我获取的包传到网盘分享给大家。

三、安装master

master节点需要安装的服务有kube-apiserverkube-controller-managerkube-scheduler,所以我们先把需要的二进制文件放到环境变量。

cp /root/kubernetes/server/bin/kube-apiserver /usr/bin/
cp /root/kubernetes/server/bin/kube-controller-manager /usr/bin/
cp /root/kubernetes/server/bin/kube-scheduler /usr/bin/
cp /root/kubernetes/server/bin/kubectl /usr/bin/

1、安装etcd

本文采用二进制安装方法,首先下载安装包。

# 下载
wget https://github.com/etcd-io/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gz

#  解压安装
tar xf etcd-v3.3.10-linux-amd64.tar.gz
cd etcd-v3.3.10-linux-amd64
cp etcd etcdctl /usr/bin/

创建system启动文件etcd.service

cat <<EOF > /usr/lib/systemd/system/etcd.service
[Unit]
Description=etcd.service

[Service]
Type=notify
TimeoutStartSec=0
Restart=always
WorkingDirectory=/var/lib/etcd
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd

[Install]
WantedBy=multi-user.target
EOF

创建配置文件。

mkdir -p /var/lib/etcd && mkdir -p /etc/etcd/
cat <<EOF >/etc/etcd/etcd.conf
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://172.18.8.200:2379"
EOF

启动etcd。

systemctl daemon-reload
systemctl start etcd.service

查看启动状态。

[root@master ~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://172.18.8.200:2379
cluster is healthy

2、安装 kube-apiserver

创建启动文件/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_ETCD_SERVERS \
        $KUBE_API_ADDRESS \
        $KUBE_API_PORT \
        $KUBE_SERVICE_ADDRESSES \
        $KUBE_ADMISSION_CONTROL \
        $KUBE_API_LOG \
        $KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

创建配置文件。

mkdir /etc/kubernetes
cat <<EOF > /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://172.18.8.200:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""
EOF

启动服务。

systemctl daemon-reload
systemctl start kube-apiserver.service

查看启动是否成功。

[root@master ~]# netstat -tnlp | grep kube
tcp6       0      0 :::6443                 :::*                    LISTEN      11086/kube-apiserve 
tcp6       0      0 :::8080                 :::*                    LISTEN      11086/kube-apiserve 

3、安装kube-controller-manager

创建启动文件/usr/lib/systemd/system/kube-controller-manager.service,添加如下内容:

[Unit]
Description=Kubernetes Scheduler
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=-/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager \
        $KUBE_MASTER \
        $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

创建配置文件/etc/kubernetes/controller-manager

cat <<EOF > /etc/kubernetes/controller-manager
KUBE_MASTER="--master=http://172.18.8.200:8080"
KUBE_CONTROLLER_MANAGER_ARGS=" "
EOF

启动服务。

systemctl daemon-reload
systemctl start kube-controller-manager.service

验证服务状态。

[root@master ~]# netstat -lntp | grep kube-controll
tcp6       0      0 :::10252                :::*                    LISTEN      11131/kube-controll 
tcp6       0      0 :::10257                :::*                    LISTEN      11131/kube-controll 

4、安装kube-scheduler

创建启动文件/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_MASTER \
        $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

创建配置文件/etc/kubernetes/scheduler

cat <<EOF > /etc/kubernetes/scheduler
KUBE_MASTER="--master=http://172.18.8.200:8080"
KUBE_SCHEDULER_ARGS="--logtostderr=true --log-dir=/var/log/kubernetes --v=2"
EOF

启动服务。

systemctl daemon-reload
systemctl start kube-scheduler.service

验证服务状态。

[root@master ~]# netstat -lntp | grep kube-schedule
tcp6       0      0 :::10251                :::*                    LISTEN      11178/kube-schedule 

使用 kubectl 查看状态。

[root@master ~]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
etcd-0               Healthy   {"health":"true"}   
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  

四、安装node节点(node01为例)

node节点需要安装的服务有dockerkubeletkube-proxflannel,所以我们先把需要的二进制文件放到环境变量。

cp /root/kubernetes/server/bin/kubelet /usr/bin/
cp /root/kubernetes/server/bin/kube-proxy /usr/bin/

1、安装docker-ce

我们使用最新版的docker,此时docker官方的版本为18.09,所以我们需要配置官方yum源。

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -P /etc/yum.repos.d/
yum install docker-ce -y

配置加速器。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://hdi5v8p1.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload

2、安装 kube-proxy 服务

创建启动文件/usr/lib/systemd/system/kube-proxy.service,添加如下内容:

[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target

[Service]
EnvironmentFile=/etc/kubernetes/config
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy \
            $KUBE_LOGTOSTDERR \
            $KUBE_LOG_LEVEL \
            $KUBE_MASTER \
            $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

创建配置目录,并添加配置文件/etc/kubernetes/proxy

mkdir -p /etc/kubernetes
cat <<EOF > /etc/kubernetes/proxy
KUBE_PROXY_ARGS=""
EOF
cat <<EOF > /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow_privileged=false"
KUBE_MASTER="--master=http://172.18.8.200:8080"
EOF

启动服务。

systemctl daemon-reload
systemctl start kube-proxy.service

查看启动状态。

[root@node01 ~]# netstat -lntp | grep kube-proxy
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      12273/kube-proxy    
tcp6       0      0 :::10256                :::*                    LISTEN      12273/kube-proxy  

3、安装 kubelete 服务

创建启动文件/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
KillMode=process

[Install]
WantedBy=multi-user.target
mkdir -p /var/lib/kubelet

创建配置文件/etc/kubernetes/kubelet,新增如下内容:

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=172.18.8.201"
KUBELET_API_SERVER="--api-servers=http://172.18.8.200:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=reg.docker.tb/harbor/pod-infrastructure:latest"
KUBELET_ARGS="--enable-server=true --enable-debugging-handlers=true --fail-swap-on=false --kubeconfig=/var/lib/kubelet/kubeconfig"

创建配置文件/var/lib/kubelet/kubeconfig,增加如下内容:

apiVersion: v1
kind: Config
users:
- name: kubelet
clusters:
- name: kubernetes
  cluster:
    server: http://172.18.8.200:8080
contexts:
- context:
    cluster: kubernetes
    user: kubelet
  name: service-account-context
current-context: service-account-context

启动kubelet。

systemctl daemon-reload
systemctl start kubelet.service

查看启动情况。

[root@node01 ~]# netstat -tnlp | grep kubelet
tcp        0      0 127.0.0.1:43228         0.0.0.0:*               LISTEN      12658/kubelet       
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      12658/kubelet       
tcp6       0      0 :::10250                :::*                    LISTEN      12658/kubelet       
tcp6       0      0 :::10255                :::*                    LISTEN      12658/kubelet   

4、配置flannel网络

从github官网下载最新版本。

wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz
tar xf flannel-v0.10.0-linux-amd64.tar.gz
cp flanneld /usr/bin/

猜你喜欢

转载自blog.51cto.com/wzlinux/2322345