虚拟机部署安装k8s最新稳定版
准备好虚拟机并安装好OS安装虚拟机软件,如:virtual box安装一台或多台机器,操作系统 CentOS7.x-86_x64配置NAT访问和hostonly网卡,目的是访问外网和固定本地ip准备单台虚拟机CentOS7.x-86_x64先复制出来一台,目的是安装相关的二进制文件,如Docker/kubeadm/kubelet等。这些文件无论是在master节点还是worker节点都是需要安装的
准备好虚拟机并安装好OS
- 安装虚拟机软件,如:virtual box
- 安装一台或多台机器,操作系统 CentOS7.x-86_x64
准备单台虚拟机CentOS7.x-86_x64
先复制出来一台,目的是安装相关的二进制文件,如Docker/kubeadm/kubelet等。这些文件无论是在master节点还是worker节点都是需要安装的,这样是为了节省时间和步骤。
配置单机物理环境
配置双网卡
配置NAT访问和hostonly网卡,目的是访问外网和固定本地ip
-
nat网卡
-
host-only网络
配置cpu、内存、disk
硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
配置单机软件环境
启动并登陆CentOS7.x-86_x64系统
规划并配置网络
可以看到host-only的网段为 192.168.56.1/24
这里计划k8s使用的网段ip为 192.168.56.190到192.168.56.200
这里先配置为静态ip192.168.56.190
cd /etc/sysconfig/network-scripts/
vi ifcfg-enp0s8
更改为:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
# BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s8
UUID=884cc662-d278-4620-b821-57a07890a135
DEVICE=enp0s8
# ONBOOT=no
IPV6_PRIVACY=no
BOOTPROTO=static
IPADDR=192.168.56.190
NETMASK=255.255.255.0
# GATEWAY=192.168.56.255
# DNS1=192.168.241.2
ONBOOT=yes
然后再重启网络服务
systemctl restart network
配置免密登陆
sshpass -p 111111 ssh-copy-id -o StrictHostKeyChecking=no root@192.168.56.190
关闭交换内存
swapoff -a
固化配置,不开机启动
如果不固化这个配置,在安装完k8s,再重启os时,kubelet组件开启自启会失败。
# 将文件中的/dev/mapper/centos-swap swap swap defaults 0 0这一行注释掉
vi /etc/fstab
输入命令,若swap那一行输出为0,则说明已经关闭。
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
iptables -F
关闭selinux
# 修改配置文件,禁止开机启动
sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 停止当前运行
setenforce 0
配置docker源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
配置阿里k8s的yum源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
导入gpgkey文件
wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
rpm --import yum-key.gpg
rpm --import rpm-package-key.gpg
确定要安装的各个软件版本
这里主要是指用的到docker、chrony、kubeadm、kubectl、kubelet、kubernetes-cni
重置yum缓存
yum clear all
yum makecache
通过假安装命令,查看各个的版本
yum install docker-ce chrony kubeadm kubectl kubelet kubernetes-cni
看到版本后,输入n 取消安装
由上面的版本信息,确定它们最近的偶数版本则为最近的稳定版本
软件 | 当前版本 | 期望的最新稳定版本 |
---|---|---|
chrony | 3.4-1.el7 | 3.4 |
docker-ce | 3:20.10.8-3.el7 | 20.10.8 |
kubeadm | 1.22.1-0 | 1.20.8 |
kubectl | 1.22.1-0 | 1.20.8 |
kubelet | 1.22.1-0 | 1.20.8 |
kubernetes-cni | 0.8.7-0 | 0.8.6 |
安装相关最新稳定版软件包及依赖
yum install docker-ce-20.10.8 chrony-3.4 kubeadm-1.20.8 kubectl-1.20.8 kubelet-1.20.8 kubernetes-cni-0.8.6
这里发现有的软件包回到了奇数版本,由于依赖关系,也没好的办法,输入y 继续即可
安装并配置时钟源
参考链接:https://blog.51cto.com/qiuyue/2344678
vi /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server ntp1.aliyun.com iburst minpoll 4 maxpoll 10
server ntp2.aliyun.com iburst minpoll 4 maxpoll 10
server ntp3.aliyun.com iburst minpoll 4 maxpoll 10
server ntp4.aliyun.com iburst minpoll 4 maxpoll 10
server ntp5.aliyun.com iburst minpoll 4 maxpoll 10
server ntp6.aliyun.com iburst minpoll 4 maxpoll 10
server ntp7.aliyun.com iburst minpoll 4 maxpoll 10
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *
# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2
# Allow NTP client access from local network.
allow 192.168.56.1/24
# Serve time even if not synchronized to a time source.
#local stratum 10
# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys
# Specify directory for log files.
logdir /var/log/chrony
# Select which information is logged.
#log measurements statistics tracking
systemctl restart chronyd
systemctl enable chronyd
# 查看时间同步源状态
chronyc sourcestats -v
启动docker服务并设置开机自启
systemctl restart docker
systemctl enable docker
设置kubelet服务开机自启
这是因为k8s每个node在重启后,是依靠kubelet重新拉起k8s状态的,并且kubeadmin在初始化机器时,也会进行这个配置检查
systemctl enable kubelet
修改/etc/sysctl.conf文件,将桥接的IPv4/6流量传递到iptables的链:
vi /etc/sysctl.conf
# 如果有,则修改
# 如果没有,添加如下行到/etc/sysctl.conf配置文件:
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 触发配置生效
sysctl -p
到这一步为止,基础配置和二进制包已经准备就绪,可以保存当前系统快照,以便后面启动多台master和work节点。
部署第一台k8s node,即首台master节点
复制出一台虚拟机当作master节点
配置master1节点的ip
# 更改master的ip 为 192.168.56.191
vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
# 重启网络
systemctl restart network
配置免密登陆
sshpass -p 111111 ssh-copy-id -o StrictHostKeyChecking=no root@192.168.56.191
配置master1节点的hostname
# 设置完hostname后,注销再重新登陆,即可看到新的hostname
hostnamectl set-hostname master1
初始化Kubernetes Master1
先确定kubeadm的版本
由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
kubeadm init \
--apiserver-advertise-address=192.168.56.191 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.8 \
--service-cidr=10.2.0.0/16 \
--pod-network-cidr=10.3.0.0/16
可以看到,最后有成功字样。
安装kubectl配置文件
根据初始化的成功提示,配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
配置完成后,就可以使用kubectl命令了
安装cni网络插件
在上一步的最后,可以发现master的节点处于NotReady的状态,查看节点的状态,发现 network plugin is not ready: cni config uninitialized
此时需要安装网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
安装完网络插件后,master1显示为Ready
首个master节点完成配置
增加worker节点
复制出一台虚拟机当worker节点
初始化worker节点,如ip、hostname等
配置ip
配置hostname
配置免密登陆
worker节点加入集群
按照kubeadmin init最后的提示,将其它机器加入节点,获取
或者在在master节点上执行kubeadm token create --print-join-command 命令获取token值也可以
如果加入过程中有报错,根据报错提示,来解决,不同问题不同分析
如在此次加入过程中,提示系统某个设置没有开启,使用命令开启即可:echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
# 例如:
kubeadm join 192.168.56.191:6443 --token n5v2e2.5zq6ravyafltnzm6 --discovery-token-ca-cert-hash sha256:8e9529c91431e141ab6b90ef42a43960223292e815c1ac923c6b9a5f9e4a27c1
可以在master节点上,查看到集群所有node的状态
如图,所有节点已经ready了
增加master节点
配置好一台虚拟机,然后执行以下步骤,以master节点的身份加入集群
获取control-plane certificate key
在k8s集群的master节点执行如下命令,获取certificate key
kubeadm init phase upload-certs --upload-certs
获取api-server token值
kubeadm token create --print-join-command
拼接master加入的命令,并在准备好的机器上执行
kubeadm join 192.168.56.191:6443 --token djr77x.xacbkl6jnyrmdyiz --discovery-token-ca-cert-hash sha256:ddfce5533209184220fb9a7172a071b9e05a0d9651e9c9a3402b2bb0b026c390 --apiserver-advertise-address 192.168.56.193 --certificate-key 2a0023d83c1917503010f1126090ff455e12e76dfd0642db5999029074f95eab
生成kubectl配置文件
mkdir -p $HOME/.kube
# 将第一台节点上的配置文件拷过来
sudo scp 192.168.65.191:/etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
检查节点状态
扩容k8s集群
扩容机器
参考上面步骤即可
- 按照增加worker节点的步骤增加worker节点
- 按照增加master节点的步骤增加master节点
扩容服务
- 在扩容好worker机器后,一般不会影响使用
- 在扩容好master机器后,可以看到,etcd、api-server、kube-controller、kube-scheduler都还是单点服务,没有HA
- coredns在调度到其它master节点时,也会有Running不到正常的状态
具体解决步骤,见文章扩容单机k8s服务到多个master节点
更多推荐
所有评论(0)