kubernetes 二进制安装(v1.20.16)环境准备
Posted 看,未来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubernetes 二进制安装(v1.20.16)环境准备相关的知识,希望对你有一定的参考价值。
文章目录
为什么要进行二进制安装?
我们明明可以用 kubeadm 直接部署 k8s 集群,简单又快速,为什么要用繁琐复杂的二进制安装?
直到那天,我的集群出问题了。少了好几个组件,我嘴上说着不知道,其实就是我自己删掉的。之前 etcd 出问题的时候病急乱投医,删错了。
事情发生之后,我的第一反应就是把缺失的组件补上去啊,但是我发现,系统上连 yaml 文件都找不到,而且这些组件的内部联系我也都不知道(我要知道,也不至于前面乱删嘛。)
作为一个要走云架构路线的小白,怎么能不手动安装一下云原生的底座呢?
上周我一直在更新 kubernetes 架构组件的系列,就是为这一篇做准备。
集群规划
做这个东西很重要,建议你可以拿个小本本记一下,这些东西将会贯穿我们这一整个的安装过程。
主机规划:
序号 | IP | 角色 | Hostname | 安装组件 |
---|---|---|---|---|
1 | 192.168.190.147 | Master | kube-master | Apiserver,ControllerManager,Scheduler,Kubelet,Proxy,Etcd |
2 | 192.168.190.148 | Node | kube-node1 | Kubelet,Proxy,Etcd |
如果条件允许,就多来几个 node,一样的配置。
可以事先将虚拟机 IP 固定住,省的哪天给飘了都不知道怎么肥四。固定方法自行百度。
序号 | 软件名称 | 版本 |
---|---|---|
1 | Centos | 7.9.2009,内核升级到5.17.1-1.el7.elrepo.x86_64 |
2 | Docker-ce | v20.10.9 |
3 | Etcd | v3.4.9 |
4 | Kubernetes | v1.20.14 |
5 | cfssl | v1.6.1 |
初始化虚拟机
升级内核
对于为什么要升级内核,可以看一下这篇:Kubernetes 部署 CentOS7.4 系统内核升级
#在所有虚拟机上进行操作
#更新yum源仓库
yum update -y
#导入ELRepo仓库的公共密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#安装ELRepo仓库的yum源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#查看可用的系统内核包
[root@vm01 ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* elrepo-kernel: ftp.yz.yamagata-u.ac.jp
Available Packages
elrepo-release.noarch 7.0-5.el7.elrepo elrepo-kernel
...
#安装最新版本内核
yum --enablerepo=elrepo-kernel install -y kernel-ml
#查看系统上的所有可用内核
sudo awk -F\\' '$1=="menuentry " print i++ " : " $2' /etc/grub2.cfg
#设置默认版本,其中 0 是上面查询出来的可用内核
grub2-set-default 0
#生成 grub 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
#重启
reboot
#删除旧内核(可选)
#查看系统中全部的内核
rpm -qa | grep kernel
#删除旧内核的 RPM 包,具体内容视上述命令的返回结果而定
yum remove kernel-3.10.0-514.el7.x86_64 \\
kernel-tools-libs-3.10.0-862.11.6.el7.x86_64 \\
kernel-tools-3.10.0-862.11.6.el7.x86_64 \\
kernel-3.10.0-862.11.6.el7.x86_64
安装模块
#在所有虚拟机上操作
[root@k8s-master ~]# modprobe -- ip_vs
[root@k8s-master ~]# modprobe -- ip_vs_rr
[root@k8s-master ~]# modprobe -- ip_vs_wrr
[root@k8s-master ~]# modprobe -- ip_vs_sh
[root@k8s-master ~]# modprobe -- nf_conntrack_ipv4
modprobe: FATAL: Module nf_conntrack_ipv4 not found.
[root@k8s-master ~]# lsmod | grep ip_vs
ip_vs_sh 16384 0
ip_vs_wrr 16384 0
ip_vs_rr 16384 0
ip_vs 159744 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack 159744 1 ip_vs
nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs
libcrc32c 16384 3 nf_conntrack,xfs,ip_vs
[root@k8s-master ~]# lsmod | grep nf_conntrack_ipv4
系统设置
#关闭并停止防火墙,
systemctl stop firewalld && systemctl disable firewalld
#禁用SELinux,让容器可以顺利地读取主机文件系统
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
#关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
配置主机名解析
cat >> /etc/hosts << EOF
192.168.190.147 k8s-master
192.168.190.148 k8s-node1
EOF
设置 ipv4 转发
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
时间同步
kubernetes要求集群中的节点时间必须精确一致,所以在每个节点上添加时间同步:
ntpdate time.windows.com
安装依赖软件包
yum install -y ipvsadm ipset sysstat conntrack libseccomp wget git
SSH免密登录
应该都会吧。
#此步操作在Master主机上进行
[root@vm01 ~]# ssh-keygen -t rsa
...
#配置公钥到其他节点,输入对方密码即可完成从master到node的免密访问
[root@vm01 ~]# ssh-copy-id k8s-node1
...
创建相关目录
#在所有虚拟机上进行操作
mkdir -p /opt/TLS/download,etcd,k8s
mkdir -p /opt/TLS/etcd/cfg,bin,ssl
mkdir -p /opt/TLS/k8s/cfg,bin,ssl
下载软件
#以下操作只在master上进行
#进入到下载目录
cd /opt/TLS/download
#下载并解压cfssl
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl_1.6.1_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssljson_1.6.1_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl-certinfo_1.6.1_linux_amd64
chmod +x cfssl*
[root@k8s-master download]# ll
total 40232
-rwxr-xr-x 1 root root 16659824 Dec 7 15:36 cfssl_1.6.1_linux_amd64
-rwxr-xr-x 1 root root 13502544 Dec 7 15:35 cfssl-certinfo_1.6.1_linux_amd64
-rwxr-xr-x 1 root root 11029744 Dec 7 15:35 cfssljson_1.6.1_linux_amd64
#下载并解压etcd
wget https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz
tar -xvf etcd-v3.4.9-linux-amd64.tar.gz
chmod +x etcd-v3.4.9-linux-amd64/etcd*
[root@k8s-master download]# ll etcd-v3.4.9-linux-amd64/
total 40540
drwxr-xr-x 14 630384594 600260513 4096 May 22 2020 Documentation
-rwxr-xr-x 1 630384594 600260513 23827424 May 22 2020 etcd
-rwxr-xr-x 1 630384594 600260513 17612384 May 22 2020 etcdctl
-rw-r--r-- 1 630384594 600260513 43094 May 22 2020 README-etcdctl.md
-rw-r--r-- 1 630384594 600260513 8431 May 22 2020 README.md
-rw-r--r-- 1 630384594 600260513 7855 May 22 2020 READMEv2-etcdctl.md
#下载并解压kubernetes
wget https://dl.k8s.io/v1.20.14/kubernetes-server-linux-amd64.tar.gz
tar zxvf kubernetes-server-linux-amd64.tar.gz
chmod +x kubernetes/server/bin/kubectl,kubelet,kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy
[root@k8s-master download]# ll kubernetes/server/bin/
total 1134068
-rwxr-xr-x 1 root root 57724928 Feb 16 20:49 apiextensions-apiserver
-rwxr-xr-x 1 root root 45211648 Feb 16 20:49 kubeadm
-rwxr-xr-x 1 root root 51773440 Feb 16 20:49 kube-aggregator
-rwxr-xr-x 1 root root 131301376 Feb 16 20:49 kube-apiserver
-rw-r--r-- 1 root root 8 Feb 16 20:48 kube-apiserver.docker_tag
-rw------- 1 root root 136526848 Feb 16 20:48 kube-apiserver.tar
-rwxr-xr-x 1 root root 121110528 Feb 16 20:49 kube-controller-manager
-rw-r--r-- 1 root root 8 Feb 16 20:48 kube-controller-manager.docker_tag
-rw------- 1 root root 126336000 Feb 16 20:48 kube-controller-manager.tar
-rwxr-xr-x 1 root root 46592000 Feb 16 20:49 kubectl
-rwxr-xr-x 1 root root 54333584 Feb 16 20:49 kubectl-convert
-rwxr-xr-x 1 root root 124521440 Feb 16 20:49 kubelet
-rwxr-xr-x 1 root root 1507328 Feb 16 20:49 kube-log-runner
-rwxr-xr-x 1 root root 44163072 Feb 16 20:49 kube-proxy
-rw-r--r-- 1 root root 8 Feb 16 20:48 kube-proxy.docker_tag
-rw------- 1 root root 114255872 Feb 16 20:48 kube-proxy.tar
-rwxr-xr-x 1 root root 49618944 Feb 16 20:49 kube-scheduler
-rw-r--r-- 1 root root 8 Feb 16 20:48 kube-scheduler.docker_tag
-rw------- 1 root root 54844416 Feb 16 20:48 kube-scheduler.tar
-rwxr-xr-x 1 root root 1437696 Feb 16 20:49 mounter
#下载并解压docker-ce
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz
tar -xvf docker-20.10.9.tgz
chmod +x docker/*
[root@k8s-master download]# ll docker
total 200840
-rwxr-xr-x 1 1000 1000 33908392 Oct 5 00:08 containerd
-rwxr-xr-x 1 1000 1000 6508544 Oct 5 00:08 containerd-shim
-rwxr-xr-x 1 1000 1000 8609792 Oct 5 00:08 containerd-shim-runc-v2
-rwxr-xr-x 1 1000 1000 21131264 Oct 5 00:08 ctr
-rwxr-xr-x 1 1000 1000 52883616 Oct 5 00:08 docker
-rwxr-xr-x 1 1000 1000 64758736 Oct 5 00:08 dockerd
-rwxr-xr-x 1 1000 1000 708616 Oct 5 00:08 docker-init
-rwxr-xr-x 1 1000 1000 2784145 Oct 5 00:08 docker-proxy
-rwxr-xr-x 1 1000 1000 14352296 Oct 5 00:08 runc
准备cfss工具
#只在master上操作
cd /opt/TLS/download
cp cfssl_1.6.1_linux_amd64 /usr/local/bin/cfssl
cp cfssljson_1.6.1_linux_amd64 /usr/local/bin/cfssljson
cp cfssl-certinfo_1.6.1_linux_amd64 /usr/local/bin/cfssl-certinfo
[root@k8s-master download]# ll /usr/local/bin/cfssl*
-rwxr-xr-x 1 root root 16659824 Apr 4 08:46 /usr/local/bin/cfssl
-rwxr-xr-x 1 root root 13502544 Apr 4 08:46 /usr/local/bin/cfssl-certinfo
-rwxr-xr-x 1 root root 11029744 Apr 4 08:46 /usr/local/bin/cfssljson
使能配置
有些东西需要使能一下
sysctl -p
拆开写吧,一篇全堆上来篇幅太长了。
以上是关于kubernetes 二进制安装(v1.20.16)环境准备的主要内容,如果未能解决你的问题,请参考以下文章
kubernetes 二进制安装(v1.20.16)环境准备