46、Kubernetes 集群搭建与容器部署全攻略

Kubernetes 集群搭建与容器部署全攻略

1. 前置准备

在搭建 Kubernetes 集群之前,需要在每台服务器上完成以下操作:
1. 安装 containerd。
2. 创建 /etc/containerd/config.toml 文件,并设置 cgroup 驱动。
3. 禁用交换分区。
4. 添加 /etc/modules-load.d/k8s.conf 文件,其中包含 br_netfilter 模块。
5. 编辑 /etc/sysctl.conf 文件以启用桥接。

完成上述操作后,重启所有节点:

sudo reboot
2. 安装 Kubernetes

节点重启完成后,开始安装 Kubernetes 所需的软件包。
1. 添加仓库密钥

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
  1. 添加仓库
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  1. 更新本地索引
sudo apt update
  1. 安装 Kubernetes 软件包
sudo apt install kubeadm kubectl kubelet

这三个软件包的作用如下:
| 软件包 | 作用 |
| ---- | ---- |
| kubeadm | 用于初始化新集群、将节点加入现有集群以及升级集群版本。 |
| kubectl | 提供 Kubernetes 命令行工具,用于与集群交互和管理。 |
| kubelet | 作为节点间通信的代理,还暴露 API 端点以实现额外的通信和功能。 |

3. 初始化集群

在指定为控制器的节点上运行以下命令初始化集群:

sudo kubeadm init --control-plane-endpoint=172.16.250.216 --node-name controller --pod-network-cidr=10.244.0.0/16

参数说明
- --control-plane-endpoint :应设置为服务器的实际 IP 地址。
- --node-name :设置为控制器节点的主机名。
- --pod-network-cidr :这是 Pod 网络的 IP 方案,通常不需要更改。

初始化成功后,终端会输出一个加入集群的命令,将其复制并妥善保存。同时,还会有三个额外的命令需要在控制器节点上运行,将它们依次复制到终端执行。

4. 部署覆盖网络

使用以下命令部署 Flannel 覆盖网络,使集群更稳定:

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
5. 加入工作节点

在工作节点上执行之前保存的加入集群命令:

sudo kubeadm join 172.16.250.216:6443 --token zu5u3x.p45x0qkjl37ine6i \
    --discovery-token-ca-cert-hash sha256...1360c
6. 验证节点状态

在控制器节点上使用以下命令验证节点状态:

kubectl get nodes

当所有节点的状态都为 Ready 时,集群搭建完成。

7. 部署容器

使用 Kubernetes 部署容器需要创建 YAML 文件,以下是一个部署 NGINX 容器的示例:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-example
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: linuxserver/nginx
      ports:
        - containerPort: 80
          name: "nginx-http"

文件说明
- apiVersion kind :指定 API 版本和部署类型,这里是 Pod。
- metadata :设置 Pod 的名称和标签。
- spec :指定要运行的容器及其配置。

假设将 YAML 文件命名为 pod.yml ,在控制器节点上使用以下命令部署容器:

kubectl apply -f pod.yml
8. 检查容器状态

使用以下命令检查容器部署状态:

kubectl get pods

若要查看更多信息,可添加 -o wide 选项:

kubectl get pods -o wide
9. 访问容器应用

使用 Pod 的 IP 地址访问容器内运行的应用:

curl 10.244.1.2

curl 命令不可用,可先安装:

sudo apt install curl
10. 创建 NodePort 服务

为了让外部设备能够访问集群内的应用,创建 NodePort 服务:

apiVersion: v1
kind: Service
metadata:
  name: nginx-example
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      nodePort: 30080
      targetPort: nginx-http
  selector:
    app: nginx

文件说明
- kind :指定为 Service。
- type :设置为 NodePort。
- ports :将 Pod 内的端口 80 映射到集群节点的端口 30080。
- selector :选择要暴露的 Pod。

假设将 YAML 文件命名为 service-nodeport.yml ,使用以下命令部署服务:

kubectl apply -f service-nodeport.yml
11. 验证服务状态

使用以下命令检查服务状态:

kubectl get service

在局域网内的机器上,使用浏览器访问控制器节点或工作节点的 IP 地址和端口 30080,即可看到 NGINX 的默认页面。

流程图

graph LR
    A[前置准备] --> B[安装 Kubernetes]
    B --> C[初始化集群]
    C --> D[部署覆盖网络]
    D --> E[加入工作节点]
    E --> F[验证节点状态]
    F --> G[部署容器]
    G --> H[检查容器状态]
    H --> I[访问容器应用]
    I --> J[创建 NodePort 服务]
    J --> K[验证服务状态]

通过以上步骤,你可以成功搭建 Kubernetes 集群并部署容器,同时实现外部设备对集群内应用的访问。

Kubernetes 集群搭建与容器部署全攻略

12. 深入理解 NodePort 服务

NodePort 服务是一种将 Kubernetes Pod 内部端口暴露到集群节点端口的方式,它允许外部设备通过集群节点的 IP 和指定的 NodePort 访问 Pod 中的应用。以下是 NodePort 服务的一些关键特性和注意事项:
- 端口范围 :NodePort 服务使用的端口范围是 30000 - 32767。在创建服务时,需要在这个范围内选择一个未被使用的端口。
- 集群范围 :NodePort 服务的端口映射是集群范围的,这意味着可以使用任何集群节点的 IP 地址和 NodePort 访问 Pod 中的应用。
- 安全性 :由于 NodePort 服务将端口暴露到了外部网络,因此需要注意安全性。建议在防火墙中限制对 NodePort 的访问,只允许特定的 IP 地址或网段访问。

13. 服务发现与负载均衡

在 Kubernetes 集群中,服务发现和负载均衡是非常重要的功能。Kubernetes 提供了内置的服务发现机制,通过 DNS 解析来实现。当创建一个服务时,Kubernetes 会为其分配一个 DNS 名称,其他 Pod 可以通过该名称访问服务。

例如,在前面创建的 nginx-example 服务中,可以通过 nginx-example 这个 DNS 名称访问该服务。以下是一个简单的示例,展示如何在另一个 Pod 中使用 DNS 名称访问 nginx-example 服务:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: test-container
      image: busybox
      command: ['sh', '-c', 'wget -O - http://nginx-example']

在这个示例中, test-pod 中的 test-container 会尝试通过 http://nginx-example 访问 nginx-example 服务。

14. 持久化存储

在实际应用中,很多应用需要持久化存储来保存数据。Kubernetes 提供了多种持久化存储解决方案,如 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)。

以下是一个简单的示例,展示如何创建一个 PV 和 PVC:

# 创建 PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/my-pv

# 创建 PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

在创建 PV 和 PVC 后,可以将 PVC 挂载到 Pod 中,实现数据的持久化存储:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx
      volumeMounts:
        - name: my-volume
          mountPath: /data
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-pvc
15. 滚动更新与回滚

Kubernetes 支持滚动更新和回滚功能,这使得在更新应用时可以平滑过渡,减少对用户的影响。以下是一个简单的示例,展示如何进行滚动更新和回滚:

# 创建一个 Deployment
kubectl create deployment nginx-deployment --image=nginx:1.14.2

# 进行滚动更新,将镜像版本更新为 1.16.1
kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1

# 查看滚动更新状态
kubectl rollout status deployment/nginx-deployment

# 回滚到上一个版本
kubectl rollout undo deployment/nginx-deployment
16. 监控与日志

为了确保 Kubernetes 集群的稳定运行,需要对集群进行监控和日志管理。以下是一些常用的监控和日志工具:
- Prometheus :用于收集和存储指标数据。
- Grafana :用于可视化监控数据。
- Elasticsearch + Logstash + Kibana(ELK) :用于收集、存储和分析日志数据。

以下是一个简单的示例,展示如何使用 Prometheus 和 Grafana 监控 Kubernetes 集群:
1. 安装 Prometheus :可以使用 Helm 安装 Prometheus:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack
  1. 安装 Grafana :同样使用 Helm 安装 Grafana:
helm repo add grafana https://grafana.github.io/helm-charts
helm install grafana grafana/grafana
  1. 配置 Grafana :登录 Grafana 控制台,添加 Prometheus 数据源,并导入 Kubernetes 相关的仪表盘模板。
17. 总结

通过以上步骤,我们详细介绍了 Kubernetes 集群的搭建、容器部署、服务管理、持久化存储、滚动更新、监控与日志等方面的内容。Kubernetes 是一个强大的容器编排平台,它提供了丰富的功能和工具,帮助我们更高效地管理和部署应用。

在实际应用中,还需要根据具体的需求和场景进行进一步的优化和调整。例如,根据应用的负载情况调整资源分配,根据安全需求配置网络策略等。

总结表格

功能 描述 命令示例
服务发现 通过 DNS 解析实现服务发现 在 Pod 中使用服务的 DNS 名称访问服务
持久化存储 使用 PV 和 PVC 实现持久化存储 kubectl create -f pv.yaml kubectl create -f pvc.yaml
滚动更新 平滑更新应用版本 kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
回滚 回滚到上一个应用版本 kubectl rollout undo deployment/nginx-deployment
监控与日志 使用 Prometheus 和 Grafana 监控集群 helm install prometheus prometheus-community/kube-prometheus-stack helm install grafana grafana/grafana

流程图

graph LR
    A[深入理解 NodePort 服务] --> B[服务发现与负载均衡]
    B --> C[持久化存储]
    C --> D[滚动更新与回滚]
    D --> E[监控与日志]
    E --> F[总结]

通过以上的步骤和介绍,你可以全面掌握 Kubernetes 集群的搭建和管理,为实际应用提供坚实的基础。

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
本系统采用微信小程序作为前端交互界面,结合Spring BootVue.js框架实现后端服务及管理后台的构建,形成一套完整的电子商务解决方案。该系统架构支持单一商户独立运营,亦兼容多商户入驻的平台模式,具备高度的灵活性扩展性。 在技术实现上,后端以Java语言为核心,依托Spring Boot框架提供稳定的业务逻辑处理数据接口服务;管理后台采用Vue.js进行开发,实现了直观高效的操作界面;前端微信小程序则为用户提供了便捷的移动端购物体验。整套系统各模块间紧密协作,功能链路完整闭环,已通过严格测试优化,符合商业应用的标准要求。 系统设计注重业务场景的全面覆盖,不仅包含商品展示、交易流程、订单处理等核心电商功能,还集成了会员管理、营销工具、数据统计等辅助模块,能够满足不同规模商户的日常运营需求。其多店铺支持机制允许平台方对入驻商户进行统一管理,同时保障各店铺在品牌展示、商品销售及客户服务方面的独立运作空间。 该解决方案强调代码结构的规范性可维护性,遵循企业级开发标准,确保了系统的长期稳定运行后续功能迭代的可行性。整体而言,这是一套技术选型成熟、架构清晰、功能完备且可直接投入商用的电商平台系统。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值