本次kubernetes单主机部署是基于AnolisOS-7.9操作系统进行部署的,当然也适用于Centos7的操作系统,根据个人情况,选择适合自己的版本!
本次部署的kubernetes版本是1.27.3版本,系统架构是etcd,API Server,Controller Manager,Scheduler,Kubelet,Kube-proxy,Containerd,Docker。
IP | 操作系统 | 内存(最低配置) | CPU(最低配置) | 硬盘(最低配置) |
---|---|---|---|---|
192…101 | AnolisOS-7.9 | 4G | 2C | 60G |
一:虚拟机安装及网络配置
1.下载安装的操作系统镜像
本文使用的是AnolisOS-7.9操作系统,系统镜像可以在阿里巴巴开源镜像站下载
下载地址:https://mirrors.aliyun.com/anolis/7.9/isos/GA/x86_64/AnolisOS-7.9-Minimal-x86_64-dvd.iso
2.本次虚拟机的安装是使用的VMware软件,使用其他软件也适用
(1)使用VMware创建虚拟机
(2)打开VMware,点击创建新的虚拟机
(3)选择自定义虚拟机
(4)虚拟机硬件兼容性直接选择默认的就行
(5)新建虚拟机向导选择稍后安装操作系统
(6)客户机操作系统选择Linux,版本选择其他Linux 3.x内核 64位
(7)虚拟机名称和虚拟机存放位置根据个人情况自定义即可
(8)处理器数量指定为2C(最低配置2C,根据个人情况,越高越好)
(9)内存最低配置4G(根绝个人情况,越高越好)
(10)网络类型使用NAT的模式(网络类型也可以使用桥接的模式)
(11)IO控制器的类型使用默认的
(12)磁盘类型也选择默认的
(13)选择磁盘使用创建一个新的虚拟磁盘
(14)指定磁盘的容量为60G,将磁盘存储为单个文件
(15)创建好以后编辑虚拟机设置,选择要部署的镜像
(16)启动虚拟机开始安装操作系统 ,选择安装操作系统
(17)操作系统语言,选择英语(如果你想使用中文就选择中文)
(18)文件系统的分区采用的是自动分区
(19)配置网络
(20)开始安装
(21)配置root用户密码
(22)安装完系统以后重启
``
(23)重启完以后使用终端工具登录验证一下
二:系统初始化
(1)更新系统
[root@localhost ~]# yum update
(2)安装wget命令
[root@localhost ~]# yum -y install wget
(3)关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
(4)关闭交换分区
[root@localhost ~]# swapoff -a #临时关闭
将/etc/fstab配置文件里的swap交换分区的配置注释掉永久配置
(5)禁用SELinux
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
cat /etc/selinux/config
(6)修改静态解析
cat >> /etc/hosts << EOF
192.168.255.101 k8s
EOF
(7)修改主机名 (修改的主机名要和你上面/etc/hosts里的一致)
hostnamectl set-hostname k8s
bash
(8)修改桥接
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#免重启使配置生效
sysctl --system
(9)时间同步
yum install ntpdate -y && ntpdate time.windows.com
三:部署ETCD
1.安装自签证书需要的ssl程序
[root@k8s ~]# mkdir /data/ssl -p
[root@k8s ~]# cd /data/ssl
下载签名软件
[https://pkg.cfssl.org/R1.2/cfssl_linux-amd64](https://pkg.cfssl.org/R1.2/cfssl_linux-amd64)
[https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64](https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64)
[https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64](https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64)
mv cfssl-certinfo_linux-amd64 cfssl-certinfo
mv cfssljson_linux-amd64 cfssljson
mv cfssl_linux-amd64 cfssl
赋予签名软件可执行权限
chmod +x /data/ssl/*
mv cfssl cfssl-certinfo cfssljson /usr/local/bin/
验证签名软件是否可用
[root@k8s ssl]# cfssl version
Version: 1.2.0
Revision: dev
Runtime: go1.6
2.生成etcd证书
生成字根签名证书
[root@k8s ssl]# cfssl print-defaults config >ca-config.json
[root@k8s ssl]# cfssl print-defaults csr >ca-csr.json
[root@k8s ssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
更新证书配置文件
ca-config.json
声明文件
ca-csr.json
更新证书
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
创建etcd的证书签名
etcd-server-csr.json
签发etcd服务端证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd etcd-server-csr.json | cfssljson -bare etcd-server
创建etcd客户端服务签名
etcd-client-csr.json
生成自签证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd etcd-client-csr.json | cfssljson -bare etcd-client
3.配置etcd服务并启动
下载etcd服务
cd /opt
wget [https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz](https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz)
解压,复制主程序到/usr/local/bin下
cp -p etcd etcdctl /usr/local/bin/
mkdir -p /data/k8s/etcd/bin/
cp -p etcd etcdctl /data/k8s/etcd/bin/
创建etcd目录,数据存放路径和配置文件存放路径
mkdir -p /var/lib/etcd/default.etcd && mkdir -p /data/etcd/config/
配置etcd服务文件
vi /usr/lib/systemd/system/etcd.service
(这里的文件名是etcd.service
,上传txt文件是为了方便复制,记得文件名不要搞错)
etcd.service.txt
创建etcd的配置文件,注意地址改成自己的本机的地址
cat /data/etcd/config/etcd.conf
etcd.conf.txt
4.启动etcd服务
systemctl enable etcd
systemctl daemon-reload && systemctl start etcd
5.验证etcd是否启动
systemctl status etcd
验证etcd的可用性
etcdctl --cacert=/data/ssl/ca.pem \
--cert=/data/ssl/etcd-server.pem \
--key=/data/ssl/etcd-server-key.pem \
--endpoints="https://192.168.255.101:2379" endpoint status -w table
6.重启节点,验证etcd的健康度
reboot
服务器起来以后验证一下etcd服务是否可用,验证返回正常则代表etcd安装成功
etcdctl --cacert=/data/ssl/ca.pem \
--cert=/data/ssl/etcd-server.pem \
--key=/data/ssl/etcd-server-key.pem \
--endpoints="https://192.168.255.101:2379" endpoint health
四,部署docker和Containerd服务
1.安装Go语言
yum install -y epel-release
yum install -y golang
2.安装docker
yum install -y yum-utils
yum-config-manager --add-repo [https://download.docker.com/linux/centos/docker-ce.repo](https://download.docker.com/linux/centos/docker-ce.repo)
yum install -y docker-ce docker-ce-cli containerd.io
3,配置docker镜像地址
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["[https://registry.docker-cn.com",](https://registry.docker-cn.com",) "https://docker.mirrors.ustc.edu.cn"],
"exec-opts": ["native.cgroupdriver=systemd"],
}
EOF
4,启动docker和Containerd服务
systemctl daemon-reload
systemctl enable docker && systemctl enable containerd
systemctl start docker && systemctl start containerd
查看服务的状态
systemctl status docker containerd
五,安装kubernetes相关组件服务
1.配置kubeadman安装的yum源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=[https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64](https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64)
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=[https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg](https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg) ``[https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg](https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg)
EOF
2.调整containerd 的默认配置
containerd config default > /etc/containerd/config.toml
将默认的镜像下载地址改成阿里云的镜像源
[root@k8s ~]# grep sandbox_image /etc/containerd/config.toml
sandbox_image = "registry.k8s.io/pause:3.6"
[root@k8s ~]# grep sandbox_image /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
3.配置containerd cgroup 驱动程序systemd
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
4.配置crictl
cat <<EOF> /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
5.重新加载Docker,重新启动containerd
systemctl reload docker && systemctl daemon-reload && systemctl restart docker && systemctl restart containerd
6.安装kubeadm,kubectl,kubelrt
yum install -y kubeadm-1.27.3 kubectl-1.27.3 kubelet-1.27.3
7.启动kubelet服务
systemctl enable kubelet
8.验证containerd的状态
crictl version
六:部署kubernetes服务
1.创建证书,配置文件存放文件夹
mkdir /usr/local/kubernetes/manifests -p && cd /usr/local/kubernetes/manifests/ && mkdir -p /data/k8s/config/ && mkdir -p /etc/kubernetes/pki/
2.生成hash值,并配置token配置文件
[root@k8s manifests]# head -c 16 /dev/urandom | od -An -t x | tr -d ' '
64e27ac83653a86c192ef484e70308b7
[root@k8s manifests]# cat >/data/k8s/config/token.csv << EOF
> 64e27ac83653a86c192ef484e70308b7,kubelet-bootstrap,10001,"system:node-bootstrapper"
> EOF
3.创建kubeenetes集群初始化配置文件
在/usr/local/kubernetes/manifests目录下配置kubeadm-config.yaml文件
kubeadm-config.yaml
certSANs参数改成你的主机地址和主机名,etcd地址需要改成咱们提前部署好的etcd地址,controlPlaneEndpoint参数地址改成本机的地址,如果是高可用的环境的话需要改成VIP的地址和端口
4.开始执行
kubeadm init --config kubeadm-config.yaml
执行结束后出现下面这些说明部署成功了
5.咱们依据出现的配置完成环境变量的配置
[root@k8s manifests]# mkdir -p $HOME/.kube
[root@k8s manifests]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s manifests]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s manifests]# export KUBECONFIG=/etc/kubernetes/admin.conf
6.验证集群的状态
7.查看当前nodes的状态是NotReady的状态,这是还没部署网络组件的原因
8.部署网络组件flannel
下载flannel
wget [https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml](https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)
kube-flannel.yml
安装flannel
kubectl apply -f kube-flannel.yml
flannel组件服务起来以后,整个kubernetes环境就可用了
9.创建一个nginx服务的Pod验证环境是否可用
创建nginx容器以后,容器的状态是Pending的状态,不是整正常的Running的状态
是因为咱们只部署了一个master节点 ,K8S的master节点默认是不运行业务Pod的,删掉master的污点
kubectl taint node k8s node-role.kubernetes.io/control-plane:NoSchedule-
Pod启动成功,能正常访问
七:升级kubernets集群
1.升级kubeadm
查看当前kubeadm的版本
kubeadm version
安装要升级版本的kubeadm
yum install -y kubeadm-1.28.2-0 --disableexcludes=kubernetes
验证下载操作正常,并且 kubeadm 版本正确:
kubeadm version
验证升级计划,此命令检查你的集群是否可被升级,并取回你要升级的目标版本。 命令也会显示一个包含组件配置版本状态的表格。
kubeadm upgrade plan
选择要升级到的目标版本,运行合适的命令。例如:
kubeadm upgrade apply v1.28.2
2.升级 kubelet 和 kubectl
yum install -y kubelet-'1.28.2-*' kubectl-'1.28.2-*' --disableexcludes=kubernetes
重启 kubelet:
systemctl daemon-reload && systemctl restart kubelet
验证