步骤 1:关闭 SELinux 和防火墙和swap
在安装之前,需要将SELinux和防火墙关闭或配置防火墙以允许Kubernetes流量通过。在CentOS 7上,您可以使用以下命令来禁用SELinux:
#临时关闭
[root@master ~]# setenforce 0
#永久关闭
[root@master ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
禁用防火墙:
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
关闭swap:
#swap开启会影响k8s编排和调度应用程序运行的效果,会降低性能
# 临时关闭
[root@master ~]# swapoff -a
# 永久关闭
[root@master ~]# sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
步骤 2:同步时间
在CentOS上安装Kubernetes之前,请确保在系统上时间统一。您可以使用以下命令来安装这些软件包:
#各个节点需要通过时间服务器保持时间同步
yum install ntpdate -y
# 可添加到定时任务中
ntpdate time.windows.com
步骤 3:安装必需软件包
在CentOS上安装Kubernetes之前,请确保在系统上安装了以下软件包:vim、curl、wget、git。您可以使用以下命令来安装这些软件包:
#安装常用的软件包
[root@k8s-master01~]#yum install -y curl git yum-utils zlib zlib-devel openssl openssl-devel net-tools vim wget lsof unzip zip bind-utils lrzsz telnet ipset ipvsadm
注意:对于Kubernetes 1.22及更高版本中,kube-proxy默认使用IPVS作为服务代理。当您启用Kubernetes服务时,默认情况下会创建一个IPVS虚拟服务,并使用具有最小连接数调度算法的IPVS负载均衡器来将流量分发到后端Pod。
请注意,虽然Kubernetes 1.22及更高版本不需要手动加载IPVS内核模块,但是您必须确保所有运行Kubernetes节点的主机都已安装所需的软件包和依赖项,例如IPVS-utils和IPSet
步骤 4: 将桥接的IPv4流量传递到iptables的链
把桥接的IPv4流量传递到iptables的链 (每台执行)
#写入
[root@master ~]# cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 生效
[root@master ~]# sysctl --system
#允许iptables检查桥接流量,若要显式加载此模块,需运行
[root@master ~]# modprobe br_netfilter
步骤 5: 安装Contained
1、安装 containerd 1.17.0
#安装 containerd 1.17.0
[root@master ~] wget https://github.com/containerd/containerd/releases/download/v1.7.0/cri-containerd-cni-1.7.0-linux-amd64.tar.gz
#安装到目录
[root@master ~] tar zxvf cri-containerd-cni-1.7.0-linux-amd64.tar.gz -C /
#创建目录
[root@master ~] mkdir /etc/containerd
#创建配置文件
[root@master ~] containerd config default > /etc/containerd/config.toml
1.1、修改上述config.toml配置
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true #false改true
[plugins."io.containerd.grpc.v1.cri"]#sandbox_image = "registry.k8s.io/pause:3.8" sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
2、安装 runc 1.1.6
[root@master ~] wget https://github.com/opencontainers/runc/releases/download/v1.1.6/runc.amd64
[root@master ~] chmod +x runc.amd64
[root@master ~] mv runc.amd64 /usr/local/sbin/runc
[root@localhost home]# /usr/local/sbin/runc -version
runc version 1.1.5
commit: v1.1.5-0-gf19387a6
spec: 1.0.2-dev
go: go1.17.10
libseccomp: 2.5.4
3、安装 libseccomp 2.5.4(内置太低)
#1、yum更新libseccomp
[root@master ~] yum install libseccomp -y
#2、二级制安装libseccomp
[root@master ~] wget
https://github.com/opencontainers/runc/releases/download/v1.1.6/libseccomp-2.5.4.tar.gz
[root@master ~] tar zxvf libseccomp-2.5.4.tar.gz; cd libseccomp-2.5.4
[root@master ~] ./configure
[root@master ~] make & make install
3、运行
#加入开机启动,并立即启动
[root@master home]# systemctl enable containerd --now
#检查启动状态
[root@master home]# systemctl status containerd
检查是否可用
[root@master multi-user.target.wants]# crictl version
Version: 0.1.0
RuntimeName: containerd
RuntimeVersion: v1.7.0
RuntimeApiVersion: v1
步骤 6: 所有主节点安装kubeadm、kubelet、kubectl
1、配置kubernetes的yum源
[root@master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2、安装
#安装kubeadm kubelet kubectl
#不指定版本则安装最新版
[root@master ~]# yum install -y kubeadm kubelet kubectl
#指定版本
[root@master ~]# yum install -y kubeadm=1.25.0-00 kubelet=1.25.0-00 kubectl=1.25.0-00
3、初始化
#初始化
kubeadm init \
--apiserver-advertise-address=10.0.2.15 \
--image-repository registry.aliyuncs.com/google_containers \
--control-plane-endpoint=cluster-endpoint \
--kubernetes-version v1.27.1 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--v=5
# –image-repository string: 这个用于指定从什么位置来拉取镜像(1.13版本才有的),默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers
# –kubernetes-version string: 指定kubenets版本号,默认值是stable-1,会导致从https://dl.k8s.io/release/stable-1.txt下载最新的版本号,我们可以将其指定为固定版本(v1.22.1)来跳过网络请求。
# –apiserver-advertise-address 指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。这里的ip为master节点ip,记得更换。
# –pod-network-cidr 指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。
# --control-plane-endpoint cluster-endpoint 是映射到该 IP 的自定义 DNS 名称,这里配置hosts映射:192.168.0.113 cluster-endpoint。 这将允许你将 --control-plane-endpoint=cluster-endpoint 传递给 kubeadm init,并将相同的 DNS 名称传递给 kubeadm join。 稍后你可以修改 cluster-endpoint 以指向高可用性方案中的负载均衡器的地址。
【温馨提示】kubeadm 不支持将没有 --control-plane-endpoint
参数的单个控制平面集群转换为高可用性集群。
4、初始化成功,配置环境变量(初始化成功输出中体现)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
5、检查状态
#检查kubelet是否开启
[root@k8s-master01 ]# systemctl status kubelet.service
#开启kubelet
[root@k8s-master01 ]# systemctl start kubelet.service
6、重置
#重置kubeadm安装
kubeadm reset
#如果已安装:重置再初始化
kubeadm reset
rm -fr ~/.kube/ /etc/kubernetes/* var/lib/etcd/*
优化:下面推荐两种kubectl命令补全安装方式。
#安装bash-completion
yum install bash-completion -y
#执行bash_completion
source /usr/share/bash-completion/bash_completion
#加载kubectl completion
source <(kubectl completion bash)
#
echo "source <(kubectl completion bash)" >> ~/.bashrc
步骤 7: 安装calico
注意:
在Kubernetes集群中,不建议在主节点(也称为控制平面节点)上安装calico/node
容器。这是因为主节点通常用于运行核心控制平面组件,例如etcd、API服务器、调度程序和控制器管理器。这些组件对集群的正常运行至关重要,并且需要足够的计算资源和可用性来保持高可用性。
如果在主节点上部署calico/node
容器,可能会导致竞争条件和资源争用,从而影响到其它关键组件的可用性和性能。此外,由于主节点一般被配置为不允许普通工作负载运行,因此确保在主节点上运行的容器数量最小化也是一个最佳实践。
因此,建议将calico/node
容器部署到专门的工作节点上,以避免占用主节点的计算资源和可用性,并确保集群的正常运行。您可以使用NodeSelector和Taints/Tolerations等Kubernetes特性,来指定哪些节点应该运行calico/node
容器并确保它们与其他工作负载隔离开来。
总之,在Kubernetes集群中使用Calico作为网络插件时,不建议在主节点上安装calico/node
容器。相反,建议将其部署到专门的工作节点上,并使用Kubernetes特性来控制其位置和资源使用。
1、下载地址
2、安装非etcd版 (简单)
#下载
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico-etcd.yaml -o calico.yaml
#运行
kubectl apply -f calico.yaml
3、etcd版
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico-etcd.yaml -o calico.yaml
k8s1.27.x 最新版本使用kubeadm 的containerd的方式安装_flyfish的技术博客_51CTO博客
kubectl常用命令_kubectl查看所有pod_床前明月光,疑似地下霜的博客-CSDN博客
【云原生实战】Kubernetes实战之基础概念_--control-plane-endpoint_陶然同学的博客-CSDN博客