开头提示:本文章系为了使自己在以后安装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
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日