编辑
🐇明明跟你说过:个人主页
🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅
🔖行路有良友,便是天堂🔖
一、引言
1、Kubernetes简介
Kubernetes(通常简称为K8s)是一个开源的容器编排平台,最初由Google开发,并于2014年发布为开源项目。它提供了一种自动化容器化应用程序部署、扩展和管理的方法。
编辑
Borg 的诞生:
谷歌的工程师们在面对大规模、分布式、可扩展应用的挑战时,创建了 Borg 系统,用于管理和运行谷歌的内部服务和应用。Borg 采用了容器化的思想,将应用程序打包成容器并在集群中运行。
Omega 的演进:
Borg 的经验在谷歌内部得到了积累和总结。在 Borg 的基础上,谷歌发展出了 Omega 系统,这是 Borg 的下一代版本,继续探索分布式系统管理的更高级别的抽象。
Kubernetes 的诞生:
2014年,Google 将 Borg 的一部分经验开源,推出了 Kubernetes 项目。Kubernetes 最初是由 Google、Red Hat、Microsoft 等公司共同推动的,旨在为云原生应用提供一个开源的容器编排和管理平台。可以说,k8s是站在Borg这个巨人的肩膀上而开发出的容器编排管理系统
推出后,Kubernetes 很快得到了开源社区的广泛关注和参与。云服务提供商、软件公司以及大量的开发者纷纷加入到 Kubernetes 的开发和维护中,形成了庞大的开源社区。
编辑
2、Kubernetes 1.28版本特性介绍
Kubernetes 1.28版本作为2023年的第二个主要版本更新,引入了一系列重要的新功能和改进。
非正常节点关闭恢复:
- Kubernetes 1.28版本中,节点非体面关闭(non-graceful shutdown)特性达到GA阶段,意味着kubelet能够更加稳定地检测到节点即将关闭的事件,并确保在节点实际下线前正确、有序地终止节点上的Pod,从而避免数据丢失和资源占用问题。
内置Sidecar容器支持:
- 此版本增强了对Sidecar容器的内置支持,包括更方便的配置管理、生命周期管理和资源隔离等方面,以更好地支持微服务架构中的辅助容器。
Job优化:
- 对Kubernetes Job对象进行了优化,涉及到更快的完成状态判定、更灵活的调度策略以及作业清理机制的改进等。
Proxy改进:
- Kubernetes代理组件(kube-proxy)的功能得到了增强,涉及性能提升、资源利用率改进或新增网络策略特性等。
调度框架优化:
- 调度框架在Kubernetes 1.28版本中进行了调整,减少了不必要的重试操作,从而提升了整体调度性能,这对于集群规模较大或者工作负载较为复杂的场景尤其重要。
编辑
3、安装前的准备工作
准备至少2台服务器,虚拟机或服务器都可以,资源配置如下
编辑
※ 安装k8s至少需要2G或以上内存
二、环境准备
1、禁用防火墙和SELinux
在两台机器上都要执行
关闭防火墙并禁止开机自启动
[root@master ~]# systemctl stop firewalld && systemctl disable firewalld
[root@node ~]# systemctl stop firewalld && systemctl disable firewalld
关闭SELinux
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@master ~]# setenforce 0
[root@master ~]# getenforce
Permissive
[root@node ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@node ~]# setenforce 0
[root@node ~]# getenforce
Permissive
2、设置时间同步
[root@master ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@master ~]# date
Tue Mar 19 14:10:22 CST 2024
[root@node ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@node ~]# date
Tue Mar 19 14:10:22 CST 2024
3、关闭swap交换分区
[root@master ~]# swapoff -a
[root@node ~]# swapoff -a
4、修改hosts文件
[root@master ~]# vi /etc/hosts
# 添加如下两行内容
192.168.40.110 master
192.168.40.111 node
[root@node ~]# vi /etc/hosts
# 添加如下两行内容
192.168.40.110 master
192.168.40.111 node
5、修改机器内核参数
[root@master ~]# modprobe br_netfilter
[root@master ~]# 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
[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
[root@node ~]# modprobe br_netfilter
[root@node ~]# 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
[root@node ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
三、安装Docker与containerd
1、配置阿里repo源
[root@master ~]# yum install yum-utils device-mapper-persistent-data lvm2 -y
[root@master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@node ~]# yum install yum-utils device-mapper-persistent-data lvm2 -y
[root@node ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2、安装container
[root@master ~]# yum install containerd.io -y
[root@node ~]# yum install containerd.io -y
3、修改containerd配置文件
[root@master ~]# mkdir -p /etc/containerd
[root@master ~]# containerd config default > /etc/containerd/config.toml
[root@master ~]# vim /etc/containerd/config.toml
#将SystemdCgroup = false修改为SystemdCgroup = true
[root@node ~]# mkdir -p /etc/containerd
[root@node ~]# containerd config default > /etc/containerd/config.toml
[root@node ~]# vim /etc/containerd/config.toml
#将SystemdCgroup = false修改为SystemdCgroup = true
4、设置container开机自启动
[root@master ~]# systemctl enable containerd --now
[root@node ~]# systemctl enable containerd --now
5、设置服务的端点地址
[root@master ~]# cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
[root@node ~]# cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
6、安装docker
[root@master ~]# yum install docker-ce -y
[root@master ~]# systemctl enable docker --now
[root@node ~]# yum install docker-ce -y
[root@node ~]# systemctl enable docker --now
7、添加docker镜像加速器
[root@master docker]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://ofcqsr1y.mirror.aliyuncs.com"]
> }
> EOF
[root@master docker]# sudo systemctl daemon-reload
[root@master docker]# sudo systemctl restart docker
[root@node docker]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://ofcqsr1y.mirror.aliyuncs.com"]
> }
> EOF
[root@node docker]# sudo systemctl daemon-reload
[root@node docker]# sudo systemctl restart docke
四、安装kubeadm、kubelet和kubectl
1、配置软件源
[root@master ~]# 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
[root@node ~]# 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
2、安装kubeadm、kubelet、kubectl
[root@master ~]# yum install kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 -y
[root@node ~]# yum install kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 -y
3、设置kubelet开机自启动
[root@master ~]# systemctl enable kubelet
[root@node ~]# systemctl enable kubelet
五、初始化Master节点
1、上传离线镜像包
离线镜像包我已经放到个人主页的资源中,大家可以自行下载
2、导入镜像
[root@master ~]# ctr -n=k8s.io images import k8s-1-28.tar.gz
[root@master ~]# ctr -n=k8s.io images import k8s-1-28-etcd.tar.gz
3、设置容器运行时
[root@master ~]# crictl config runtime-endpoint /run/containerd/containerd.sock
4、初始化Master节点
[root@master ~]# kubeadm init --kubernetes-version=1.28.2 --apiserver-advertise-address=192.168.40.110 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看节点状态
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master NotReady control-plane 66s v1.28.2
六、添加Work节点
1、设置容器运行时
[root@node ~]# crictl config runtime-endpoint /run/containerd/containerd.sock
2、导入镜像
[root@node ~]# ctr -n=k8s.io images import k8s-1-28-etcd.tar.gz
[root@node ~]# ctr -n=k8s.io images import k8s-1-28.tar.gz
3、将Work节点加入到集群
在Master节点上生成token
[root@master ~]# kubeadm token create --print-join-command
将生成的密钥考到node节点执行
[root@node ~]# kubeadm join 192.168.40.110:6443 --token 8zx14z.br9wctj9shxb08sq --discovery-token-ca-cert-hash sha256:6559345665c6beb70a9da42c2de6b85fc41f61d3dc3c527be3f7cc4629c503ab
4、查看集群状态
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master NotReady control-plane 10m v1.28.2
node NotReady <none> 5s v1.28.2
5、为Work节点设置标签
[root@master ~]# kubectl label nodes node node-role.kubernetes.io/work=work
#再次查看
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master NotReady control-plane 10m v1.28.2
node NotReady work 5s v1.28.2
七、安装网络插件calico
1、calico介绍
- Calico是一个开源的网络和网络安全解决方案,专为容器化环境设计,旨在提供网络连接和安全策略管理功能。它基于BGP协议,实现了一个纯三层网络方案,能够与Kubernetes、AWS、OpenStack等云平台良好地集成。
- Calico的核心功能包括网络连接、网络策略和安全性。通过使用BGP路由协议,Calico能够在所有节点上通过Linux Kernel实现高效的vRouter进行数据转发。每个vRouter都会将在本节点上运行的容器的路由信息广播到整个Calico网络,并自动设置到达其他节点的路由转发规则。这种设计确保了所有容器之间的数据流量都是通过IP路由的方式完成互联互通的。
编辑
2、安装calico
[root@master ~]# curl -L -O https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
[root@master ~]# kubectl apply -f calico.yaml
3、查看Pod状态
[root@master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-658d97c59c-fbrgn 1/1 Running 0 5m31s
kube-system calico-node-qd6v2 1/1 Running 0 5m31s
kube-system calico-node-s9khc 1/1 Running 0 5m31s
kube-system coredns-66f779496c-l6nqx 1/1 Running 0 19m
kube-system coredns-66f779496c-n7jn6 1/1 Running 0 19m
kube-system etcd-master 1/1 Running 0 19m
kube-system kube-apiserver-master 1/1 Running 0 19m
kube-system kube-controller-manager-master 1/1 Running 5 19m
kube-system kube-proxy-7wbhh 1/1 Running 0 9m15s
kube-system kube-proxy-bb47r 1/1 Running 0 19m
kube-system kube-scheduler-master 1/1 Running 5 19m
八、总结
- 环境准备:首先,需要确保安装环境的准备充分。这包括选择合适的操作系统(如Linux),确保硬件资源(如CPU、内存、存储)满足Kubernetes的最低要求,以及配置好网络环境,如网络插件的选择和配置。
- 软件依赖安装:安装Kubernetes之前,需要安装一些必要的软件依赖,如Docker或其他容器运行时(如Containerd)、kubectl命令行工具等。这些工具是Kubernetes正常运行的基础。
- 集群初始化:使用kubeadm进行集群初始化是Kubernetes安装的关键步骤。在初始化过程中,需要配置集群的一些基本参数,如API服务器的地址、网络插件的选择等。同时,还需要确保kubeadm能够成功地在各个节点上部署和启动必要的组件。
- 节点加入:初始化完成后,需要将其他节点加入到集群中。涉及到在各个节点上安装必要的软件,并使用kubeadm命令将节点加入到集群中。在节点加入过程中,需要确保节点的配置与集群一致,并且能够与其他节点正常通信。
- 网络配置:Kubernetes集群中的网络配置是一个重要的环节。需要选择合适的网络插件(如Calico),并正确配置相关参数,以确保Pod之间的网络互通以及服务的正常访问。
编辑
💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Docker的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺
🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!