赞
踩
目录
c. 设置一下ipv4,否则会失败(此处为坑,不设置无法初始化成功)
c. 为etcd和apiserver自签证书(相当于门禁卡,保证互通)
比起君子讷于言而敏于行,我更喜欢君子善于言且敏于行。
单master集群:只有一个master,管理多个node节点。
多master集群:拥有多个master,管理多个node节点。高可用模式。比单master集群多一个负载均衡的步骤。
test环境搭建,因此采用单master集群,如后续有需要可再增加master。
master节点:
测试环境 | 生产环境 | |
CPU | 2 | 8 |
内存 | 4G | 16G |
硬盘 | 20G | 100G |
node节点:
测试环境 | 生产环境 | |
CPU | 4 | 16 |
内存 | 8G | 64G |
硬盘 | 40G | 500G |
目前常见的有两种方式:
1)kubeadm方式
kubeadm是k8s的一个部署工具,部署方式比较简单。只需要用到两个命令,kubeadm init(初始化)和 kubeadm join(将node节点加入到master中)。可以快速部署k8s集群。优点是快速,无需额外自己处理。比较常见且节约时间
官方链接:https://kubernetes.io/docs/reference/setup-tools/kubeadm/
2)二进制方式
从 github 下载二进制包,手动部署每个组件,过程比较麻烦。优点是,遇到问题后可以精准定位,有利于后续维护。毕竟是自己一步一步操作的,更清楚里面的弯弯绕绕~
大致流程:
1)创建一个master节点 kubeadm init
2)将node节点加入到当前集群中 kubeadm join <master节点的ip和端口>
3)配置网络插件和测试k8s集群
机器配置:
-- 准备了一台master,一台node。硬件配置CPU 2核,内存251G,硬盘500G
-- 机器之间可以互相ping通,操作系统为CentOS7
-- 禁止swap分区
-- 可以拉取镜像
master: 192.10.18.102
node: 192.10.18.103
由于自己用的是之前配置好的旧物理机,所以跳过此流程。如果需要用虚拟机的话。要进行安装3台Centos7.x的操作系统,之后进行如下初始化:
1)关闭防火墙
- systemctl stop firewalld
- systemctl disable firewalld
2)关闭selinux
- sed -i 's/enforcing/disabled/' /etc/selinux/config #永久关闭
- setenforce 0 #临时关闭
3)关闭swap
- swapoff -a #临时关闭
- sed -ri 's/."swap."/#&/' /etc/fstab #永久关闭
4)设置主机名
hostnamectl set-hostname <hostname>
5)只在master添加hosts
- cat >> /etc/hosts << EOF
- ip master
- ip node1
- ip node2
- EOF
6)将桥接的ipv4流量传递到iptables的链,配置内核参数和优化
- 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
- EOF
-
-
- sysctl --system #生效命令
7)时间同步
- yum install ntpdate -y
- ntpdate time.windows.com
8)安装ipset、ipvsadm
- yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
-
- cat > /etc/modules-load.d/ipvs.conf <<EOF
- # Load IPVS at boot
- ip_vs
- ip_vs_rr
- ip_vs_wrr
- ip_vs_sh
- nf_conntrack
- nf_conntrack_ipv4
- EOF
-
-
- systemctl enable --now systemd-modules-load.service
- ###注!!!若此处失败,可能是因为内核版本低导致的,可升级内核后,再执行此命令#####
-
-
- #确认内核模块加载成功
- lsmod |egrep "ip_vs|nf_conntrack_ipv4"
b. 升级内核(根据自己情况进行选择,满足时可不升级)
1)查看系统版本
cat /etc/redhat-release
2)查看当前内核版本
uname -r
3)检查是否安装ELRepo
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
看到error说明没有安装ELRepo
4)升级安装ELRepo
安装
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
或升级
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
5)查看可用安装包, 长期维护版本为lt,最新主线稳定版为ml
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
6)安装最新的内核
yum --enablerepo=elrepo-kernel install -y kernel-lt
7)查看可用内核版本及启动顺序
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
8)安装辅助工具(非必须,有些系统自带该工具):grub2-pc
yum install -y grub2-pc
9)设置内核默认启动顺序
grub2-set-default 0
- vim /etc/default/grub
- GRUB_DEFAULT=0 #这里从原来的saved改为0
10)生成grub配置文件
# 运行grub2-mkconfig命令来重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
11)重启机器
reboot
12)查看内核版本是否正确
uname -r
13)安装 yum-utils 工具
当系统安装的内核大于3个时,会自动删除旧的内核版本或自己查看已经安装的内核后手动yum remove -y 进行删除旧版本
yum install -y yum-utils
14)删除旧的工具包
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64
15)安装新版本的工具包
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt-tools.x86_64
16)查看已安装内核
rpm -qa | grep kernel
- vim /etc/sysconfig/modules/ipvs.modules
-
- cat /etc/sysconfig/modules/ipvs.modules
- nf_conntrack
-
- systemctl enable --now systemd-modules-load.service
-
- lsmod |egrep "ip_vs|nf_conntrack_ipv4"
-
- lsmod |egrep "ip_vs|nf_conntrack_ipv"
-
-
1)安装依赖软件包
yum -y install yum-utils device-mapper-persistent-data lvm2
2)添加阿里Docker源
[root@k8s-master ~]
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3)添加overlay和netfilter模块
- cat >>/etc/modules-load.d/containerd.conf <<EOF
- overlay
- br_netfilter
- EOF
- modprobe overlay
-
- modprobe br_netfilter
4)安装Containerd,这里安装最新版本(1.5版本及以下不可使用)
yum -y install containerd.io
5)创建Containerd的配置文件
- mkdir -p /etc/containerd
-
- containerd config default > /etc/containerd/config.toml
-
- sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml
-
- sed -i '/sandbox_image/s/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
6)启动containerd
- systemctl enable containerd
-
- systemctl start containerd
1)添加阿里kubernetes源
- vim /etc/yum.repos.d/kubernetes.repo
-
- [kubernetes]
-
- name=Kubernetes
-
- baseurl=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/rpm-package-key.gpg
2)安装kubectl、kubelet、kubeadm
查看所有的可用版本
yum list kubelet --showduplicates |grep 1.27
这里安装当前最新版本1.27.1
yum -y install kubectl-1.27.1 kubelet-1.27.1 kubeadm-1.27.1
设置开机自启kubelet(此时并没有kubelet配置文件无法启动,正常状况)
- systemctl enable kubelet
-
- systemctl start kubelet
1)查看k8s v1.27.1初始化所需要的镜像
kubeadm config images list --kubernetes-version=v1.27.1
2)初始化命令
kubeadm init --kubernetes-version=1.27.1 --apiserver-advertise-address=10.142.50.190 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
注:pod的网段为: 10.244.0.0/16,api server地址为Master本机IP,网段可以自定义,不冲突即可。
参数详解:
-- 指定版本。(可按需修改版本)
-- 设置了apiserver,即当前节点的ip。
-- 指定镜像仓库地址,拉取镜像。
-- service-cidr是svc网络 kubectl get svc #查看svc信息
默认使用10.96.0.0/12
-- pod-network-cidr 是pod网络 kubectl get pods -o wide #查看pod网络信息
-- k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,默认使用10.244.0.0/16
此操作,等待时间较长
3)成功返回信息,执行返回内容即可
- Your Kubernetes control-plane has initialized successfully!
-
-
- To start using your cluster, you need to run the following as a regular user:
-
-
- mkdir -p $HOME/.kube
-
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
-
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
- Alternatively, if you are the root user, you can run:
-
- export KUBECONFIG=/etc/kubernetes/admin.conf
-
- You should now deploy a pod network to the cluster.
-
- Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
-
- https://kubernetes.io/docs/concepts/cluster-administration/addons/
-
- Then you can join any number of worker nodes by running the following on each as root:
-
-
- kubeadm join IP:6443 --token maod8l.w4g2cu2tl4er9gil \
-
- --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
master节点执行
- mkdir -p $HOME/.kube
-
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
-
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
node节点执行
-
- kubeadm join IP:6443 --token maod8l.w4g2cu2tl4er9gil \
-
- --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kube-apiserver kube-controller-manager kube-scheduler etcd
kubelet kube-proxy docker etcd
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。