离线环境安装单主控Kubernetes(k8s)的教程

开头提示:本文章系为了使自己在以后安装k8s环境时可以方便的查找到相关的安装教程而编写的,所以不含相关软件的下载请自行打包。

实话实说k8s在之前就有涉及到了但是由于自己的服务器配置低得可怜在当时找的教程是单节点部署的教程就老是不成功,可能这其中也是因为内存小与2GB同时又开启了SWAP虚拟内存的原因吧。虽然k8s仅限于知道的阶段但对于Docker至少还是使用过的就是没有在生产环境中使用因为我不会打包成Docker镜像。

啰嗦了这么多下面就直接进入安装的正题吧!(k8s的功能用途我就不再复制粘贴了。。。)

一、操作系统要求

需要安装Centos7.6或者以上版本,最小化安装即可。增加一块磁盘挂载到/data目录。
注:本文档基于Centos 7.6 进行的编写。文中的Kubernetes是1.14.0版本,Docker/18.9.4。

二、主控端及节点端都需要的操作

1、配置主机名(主机名按需求自行规划)

hostnamectl --static set-hostname [hostname]

2、关闭防火墙、selinux

service firewalld stop
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0

3、关闭swap(虚拟内存)

3.1、临时关闭(重启后失效,会导致k8s启动失败)

swapoff -a

3.2、永久关闭

编辑/etc/fstab注释/dev/mapper/centos-swap swap这一行

vi /etc/fstab
#/dev/mapper/centos-swap swap              swap    defaults        0 0

4、配置内核参数

echo '
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
net.ipv4.tcp_max_tw_buckets = 10000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 10
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_syncookies = 1
net.core.somaxconn = 65535
net.ipv4.tcp_retries2 = 80
net.core.wmem_max = 21299200
net.core.rmem_max = 21299200
net.core.wmem_default = 21299200
net.core.rmem_default = 21299200
kernel.sem = 250 6400000 1000 25600
net.ipv4.tcp_rmem = 8192 250000 16777216
net.ipv4.tcp_wmem = 8192 250000 16777216
vm.overcommit_memory = 1
vm.swappiness=0
kernel.threads-max = 999999
vm.max_map_count = 999999
' > /etc/sysctl.conf

执行下面命令使其生效

sysctl -p

5、挂载硬盘

5.1、查看当前存在的磁盘

fdisk -l

5.2、对磁盘进行分区

fdisk /dev/sdb

5.3、格式化磁盘

mkfs.ext4 /dev/sdb1

注意:对于大于2TB的硬盘请使用其他分区软件进行分区。

5.4、挂载到对应目录(/data目录)

mkdir /data
chmod 777 /data -R
mount  /dev/sdb1 /data

5.5、设置自动挂载以便重启后也能生效

修改编辑 /etc/fstab 加入自动挂载语句(在文件末尾追加)

vi /etc/fstab
/dev/sdb1           /data                  ext4    defaults        0 0

6、移除Centos默认源

mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup

注意:这里之所以移除是因为部署的服务器在内网没有外网权限为了防止出现提示网络错误之类的问题。在操作前最好看看是否已经修改过内内网源了或者其他源。

7、上传并解压软件包

采用root用户上传软件包(k8s1.14.0.zip)到/data目录,并采用unzip命令解压

cd /data
unzip k8s1.14.0.zip

注意:可能没有安装到unzip,可以自行安装或者在本地打包成tar或者tar.gz格式的使用tar进行解压。

8、配置hosts

vi /etc/hosts

示例如下:

192.168.252.131 paas-001
192.168.252.132 paas-002
192.168.232.133 paas-003

三、主控端的操作

1、配置yum源

echo '
[Kubernetes]
name=Kubernetes
baseurl=file:///data/k8s1.14.0/master/yum_repos
gpgcheck=0
enable=1
' > /etc/yum.repos.d/k8s.repo

注意:文中的路径仅为本人在实施部署的过程中的路径,请根据实际情况自行进行修改。

2、安装与配置Docker

2.1、安装docker

yum install docker-ce -y

画外音:可以会提示某些依赖版本过高这里可以将对应的版本进行降级(也可以使用高版本Docker等软件,但我们假设Docker等版本不变)

yum downgrade policycoreutils
yum downgrade audit-libs-python audit-libs audit

2.2、创建docker目录

mkdir /data/docker

2.3、创建软连接

ln -s /data/docker /var/lib/docker

2.4、启动docker

service docker start

2.5、设置开机自启

systemctl enable docker

3、安装及配置kubeadm

3.1、安装kubeadm

yum install kubeadm kubectl -y

提示:由于我使用的包所依赖的包较Centos7.8的版本低在Centos7.8系统安装时会提示相关依赖问题可以对相应的包进行降级或者使用新版本的k8s。

3.2、设置开机自启

systemctl enable kubelet

3.3、替换文件

chmod a+x /data/k8s1.14.0/master/sbin/kubeadm
rm -f /usr/bin/kubeadm
cp /data/k8s1.14.0/master/sbin/kubeadm /usr/bin/kubeadm

3.4、导入docker镜像

docker load -i /data/k8s1.14.0/master/images/master_1.14.0.tar
docker load -i /data/k8s1.14.0/master/images/node-problem-detector_v0.7.1.tar

3.5、替换命令脚本

cp  /data/k8s1.14.0/master/sbin/* /usr/local/bin/
chmod a+x /usr/local/bin/*

3.6、配置etcd.service

cd /data/k8s1.14.0/master
vi etcd.service.tpl

示例文件如下:

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
ExecStart=/usr/local/bin/etcd \
  --name=paas-001 \
  --initial-advertise-peer-urls=http://192.168.252.131:2380 \
  --listen-peer-urls=http://192.168.252.131:2380 \
  --listen-client-urls=http://192.168.252.131:2379 \
  --advertise-client-urls=http://192.168.252.131:2379 \
  --initial-cluster-token=etcd-cluster-0 \
  --initial-cluster=paas-001=http://192.168.252.131:2380 \
  --initial-cluster-state=new \
  --data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

注意:需要根据实际情况进行配置:
–name:安装节点的主机名;
–initial-advertise-peer-urls、–listen-peer-urls、–listen-client-urls、–advertise-client-urls、–advertise-client-urls:修改为当前节点的IP地址;
–initial-cluster:修改集群的所有节点的名称以及IP地址。
提示:将示例中的paas-001、192.168.252.131根据当前的主机名和IP进行对应修改。

3.7、配置并启动

cp /data/k8s1.14.0/master/etcd.service.tpl  /etc/systemd/system/etcd.service
mkdir -p /var/lib/etcd
systemctl daemon-reload
systemctl enable etcd
systemctl restart etcd

3.8、测试etcd是否正常启动

etcdctl --endpoints=http://192.168.252.131:2379 cluster-health

注意:–endpoints输入自己etcd节点的IP。

3.9、配置初始化kubeadm的文件(修改kubeadm-config.yaml.tpl文件)

cd /data/k8s1.14.0/master
vi kubeadm-config.yaml.tpl

示例文件如下:

apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.14.0
apiServer:
  certSANs:
  - 192.168.252.131
  - 127.0.0.1
  extraArgs:
    insecure-bind-address: "0.0.0.0"
    insecure-port: "8080"
    service-node-port-range: "79-60000"
networking:
  # This CIDR is a Calico default. Substitute or remove for your CNI provider.
  podSubnet: 192.168.0.0/16
etcd:
  external:
    endpoints:
- http://192.168.252.131:2379

注意:需要修改以下内容;Endpoints:所有的主控IP;certSANs:所有的主控IP;podSubnet:容器分配的IP段。
提示:实例中的192.168.252.131修改为当前主控节点IP,192.168.0.0/16进行对应修改,这里建议不要和宿主机IP同网段否则会导致无法连接上宿主机及其他机子。比如由于这里宿主机IP是192.168.252.0/24网段,容器分配的网段可以修改成172.16.0.0/16。

3.10、初始化启动kubeadm

kubeadm init --config=/data/k8s1.14.0/master/kubeadm-config.yaml.tpl

注意:保存好输出的以kubeadm join…开头的内容,节点加入集群需要使用。

3.11、安装calico(编辑calico.yaml.tpl文件)

cd /data/k8s1.14.0/master
vi calico.yaml.tpl

示例文件如下

kind: ConfigMap
apiVersion: v1
metadata:
  name: calico-config
  namespace: kube-system
data:
  # Configure this with the location of your etcd cluster.
  etcd_endpoints: "http://192.168.252.131:2379"

  # If you're using TLS enabled etcd uncomment the following.
  # You must also populate the Secret below with these files.
  etcd_ca: ""   # "/calico-secrets/etcd-ca"
  etcd_cert: "" # "/calico-secrets/etcd-cert"
  etcd_key: ""  # "/calico-secrets/etcd-key"
  # Typha is disabled.
  typha_service_name: "none"
  # Configure the Calico backend to use.
  calico_backend: "bird"

  # Configure the MTU to use
  veth_mtu: "1440"

...

 - name: CALICO_IPV4POOL_CIDR
              value: "192.168.0.0/16"
...

注意:主要修改以下内容:etcd_endpoints:当前主控IP;CALICO_IPV4POOL_CIDR:的value需要与上面给容器分配的IP段一样。

执行下面命令进行安装

cd /data/k8s1.14.0/master
kubectl apply -f calico.yaml.tpl

3.12、重新生成token

Token有效期是24小时,如果token过期或者没有保存kubeadm join…开头的内容,执行下面命令重新生成

kubeadm token create --print-join-command

四、工作节点端的操作

1、配置yum源

echo '
[Kubernetes]
name=Kubernetes
baseurl=file:///data/k8s1.14.0/node/yum_repos
gpgcheck=0
enable=1
' > /etc/yum.repos.d/k8s.repo

2、安装并配置docker

2.1、安装docker

yum install docker-ce -y

2.2、创建目录

mkdir /data/docker

2.3、创建软连接

ln -s /data/docker /var/lib/docker

2.4、启动docker

service docker start

2.5、配置自启

systemctl enable docker

3、安装并配置kubeadm

3.1、安装kubeadm

yum install kubeadm kubectl -y

3.2、配置自启/

systemctl enable kubelet

3.3、替换命令脚本

chmod a+x /data/k8s1.14.0/node/sbin/kubeadm
rm -f /usr/bin/kubeadm
cp /data/k8s1.14.0/node/sbin/kubeadm /usr/bin/kubeadm

3.4、导入docker镜像

docker load -i /data/k8s1.14.0/node/images/node_1.14.0.tar

3.5、加入集群

kubeadm join 192.168.252.131:6443 --token ijvhll.r46q6ccto4rof5ft \
--discovery-token-ca-cert-hash sha256:0c5912304874b1e765a1b18924fe1764033465ced47924bc2392b9ea94e0c033

注意:上面命令是主控启动后输出的命令,需要执行主控输出的命令。

在搭建学习过程中踩到过大大小小各种坑,也要踩到坑才能知道怎么爬出来。。。。。。

ChiuYut

2020年9月29日

发布者

ChiuYut

咦?我是谁?这是什么地方? Ya ha!我是ChiuYut!这里是我的小破站!