提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 一、云原生的基础概述
-
- [1.1 云原生的定义](#1.1 云原生的定义)
- [1.2 云原生的技术栈](#1.2 云原生的技术栈)
- [1.3 k8s是什么](#1.3 k8s是什么)
- [1.4 为什么要用k8s](#1.4 为什么要用k8s)
- 二、k8s集群架构与组件
- 三、安装k8s
- 总结:
一、云原生的基础概述
1.1 云原生的定义
云原生的核心思想,是让应用从 "为单台服务器设计",变成 "为云环境设计" ------ 充分利用云的弹性(按需扩缩容)、分布式(多节点协作)、自动化(减少人工)特性,让应用开发快、部署快、故障少、扩容灵。
1.2 云原生的技术栈
云原生 = 容器化(docker+k8s) + 微服务(Microservices)+ 无服务(Serverless) + DevOps +
Service Mesh(服务网格) + 云(Cloud)
1.3 k8s是什么
- Kubernetes 是一个开源平台,用于 自动部署、扩展和管理容器化(containerized)应用程序
- 它可以看作一个负责自动化运维、编排多个容器(如由 containerd 驱动的容器)的集群管理系统
1.4 为什么要用k8s
- 自动化运维:无须人工干预,实现一条命令或声明式方式完成部署、更新、扩容、缩容、删除等
- 弹性伸缩:依据指标(CPU、内存、自定义指标等)自动扩展或缩减 Pod 副本数
- 容灾 / 自愈:当某个节点或容器失败时,K8S 会自动重建或迁移 Pod,保证副本数量和期望状态
- 服务发现与负载均衡:通过 Service 为 Pod 提供稳定的访问入口,并自动分发请求
- 滚动升级与回滚:支持渐进式升级,一旦出错可以回滚到之前版本
- 集中配置与密钥管理:通过 ConfigMap 、 Secret 等资源集中管理配置与敏感数据
- 存储编排:支持将外部存储(NFS、Ceph、云存储等)纳入集群资源管理
- 批处理 / 定时任务:支持 Job 、 CronJob 用于一次性或定时任务
二、k8s集群架构与组件
1、控制平面组件(Master / Control Plane)组件
Kubernetes 采用 控制平面 + 工作节点 的主从架构,控制平面负责调度与管理,节点负责运行实际的应用负载。
- apiserver:集群的 API 接口入口,负责接收所有资源操作请求(增删改查、Watch),判断你收i否有权限进行对资源的操作。
- Scheduler:节点调度,对尚未调度的 Pod 选择合适的节点,基于预选(predicates)与优选(priorities /scoring)策略。比如我们新增一个Pod的时候,根据节点资源使用情况,合理使用节点资源,将该POD建在该节点上。
- ControllManager: 集群状态监控,负责管理各种资源对象的状态,检测节点上pod状态,尽量对故障进行处理,或者使用其它POD来代替它。ControllManager会监控各种资源对象的状态,比如:Node,Service,pod等等。怎么确定各种资源组件是否正常,就用到了etcd
- etcd:高可用的键-值存储系统。用来存储所有资源对象的状态信息,比如一个pod挂掉了,新增一个pod,这些信息会被及记录到etcd中。是整个集群的数据存储中心。
2、 工作节点(Node / Worker)组件

三、安装k8s
Master主节点:192.168.10.2
node01:192.168.10.3
node02:192.168.10.5
1、环境准备
所有节点,关闭防火墙、Selinux、Swap分区
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
- 关闭交换分区
swapoff -a
sed -ri 's/.swap. /#&/' /etc/fstab
2、加载ip_vs模块
bash
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
3、调整内核参数
cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptable链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
4、所有节点安装docker安装步骤
bash
1、安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2、设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装华为加速器
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
4、安装Docker并设置开机自动启动
systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service
**docker info | grep "Cgroup Driver"
Cgroup Driver: systemd**
yum install -y docker-ce docker-ce-cli containerd.io
(上面安装的是Docker社区版本)
yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io(安装的是指定版本,在docker-ce后面加上指定版本,在docker-ce-cli加上指定版本)
5、在所有节点安装kubeadm,kubelet和kubectl
//定义kubernetes源 在基于 yum 的 Linux 系统(如 CentOS 7/RHEL 7)中,创建 Kubernetes 的 yum 仓库配置文件,让系统可以通过 yum 从阿里云的 Kubernetes 镜像源安装相关组件。
bash
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=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
EOF
- kubelet:运行在所有 k8s 节点上的核心代理,负责管理 Pod 生命周期、与 master 节点通信;
- kubeadm:k8s 集群部署工具,用于快速初始化集群、加入节点等;
- kubectl:k8s 命令行工具,用于操作和管理 k8s 集群资源。
//开机自启kubelet
systemctl enable kubelet.service
6、部署k8s集群
查看初始化需要的镜像
kubeadm config images list
//在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录
unzip v1.20.11.zip -d /opt/k8s
cd /opt/k8s/v1.20.11
//批量将当前目录下所有 .tar 格式的 Docker 镜像包导入到本地 Docker 环境中
for i in (ls \*.tar); do docker load -i i; done

//复制镜像和脚本到 node 节点,并在 node 节点上执行脚本加载镜像文件
scp -r /opt/k8s root@node01:/opt
scp -r /opt/k8s root@node02:/opt
- //初始化kubeadm,将 kubeadm 初始化 k8s 集群时的默认配置参数,输出并保存到 /opt/kubeadm-config.yaml 文件中。简单来说,就是把 kubeadm 内置的 "初始化集群默认模板" 导出成一个可编辑的 YAML 文件,方便你后续自定义修改集群初始化配置。
kubeadm config print init-defaults > /opt/kubeadm-config.yaml
cd /opt/
vim kubeadm-config.yaml
bash
......
11 localAPIEndpoint:
12 advertiseAddress: 192.168.10.2 #指定master节点的IP地址
13 bindPort: 6443 # k8s API Server 默认端口
......
34 kubernetesVersion: v1.20.11 #指定kubernetes版本号
35 networking:
36 dnsDomain: cluster.local
37 podSubnet: "10.244.0.0/16" #指定pod网段,10.244.0.0/16用于匹配flannel默认网段
38 serviceSubnet: 10.96.0.0/16 #指定service网段
39 scheduler: {}
#末尾再添加以下内容
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
7、设定kubectl
kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 "$HOME/.kube/config" 的路径进行加载。
bash
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
//如果 kubectl get cs 发现集群不健康,更改以下两个文件,
1、把--bind-address=127.0.0.1变成--bind-address=192.168.10.2
2、把httpGet:字段下的hosts由127.0.0.1变成192.168.10.19(有两处)
3、# 搜索port=0,把这一行注释掉
bash
vim /etc/kubernetes/manifests/kube-scheduler.yaml
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
重启kublet
systemctl restart kubelet
8、所有节点部署网络插件flannel
//所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件
cd /opt

//在 master 节点创建 flannel 资源
kubectl apply -f kube-flannel.yml
9、在node节点上执行kubeadm join 命令加入群集。将node节点加入集群
首先在master 组件查找
bash
cd /opt
cat kubeadm-init.log

然后在node01,node02节点输入框中的内容。将node节点加入集群。
10、在master节点上查看节点状态。
kubectl get nodes
kubectl get pods -n kube-system

- ////测试 pod 资源创建
kubectl create deployment nginx --image=nginx
kubectl get pods -o wide

//暴露端口提供服务
kubectl expose deployment nginx --port=80 --type=NodePort
//kubectl get svc

浏览器中输入master01虚拟机IP:32661访问nginx成功。

总结:
安装 k8s 的核心作用是对容器化应用进行统一编排管理,可自动化完成应用的部署、扩缩容与运维操作,简化分布式应用的管理复杂度。
同时它能借助集群资源调度、故障自愈及服务治理能力保障应用高可用运行,还能通过不同类型 Service 灵活实现服务的内部通信与外部访问暴露