erda 开源产品纳管自建k8s集群(一)

简介: Erda 是新一代数字化云原生 PaaS 平台,其核心包含三大模块:应用(微服务)研发治理平台、快数据治理平台和混合云管理平台。是基于 K8s 的应用开发管理平台,而并非一个 K8s 发行版本,也不是一个 K8s 管理平台。

开源版本:

https://github.com/erda-project

管网:

https://www.erda.cloud/

华为云市场:

https://marketplace.huaweicloud.com/contents/a1210d06-82af-4552-915d-d3d9d10a13ea

aws云市场:

https://awsmarketplace.amazonaws.cn/marketplace/search/results?x=0&y=0&searchTerms=erda

阿里云产品:

https://www.aliyun.com/solution/terminusPaaS/?spm=5176.21213303.J_8058803260.115.6d4253c9NV96xG

前置要求

所有节点保持时钟一致

关闭swap分区

关闭iptables防火墙

关闭selinux

环境说明

## 角色定义

# vim /etc/hosts

master 10.15.26.250

node1  10.15.26.251

node2  10.15.26.252

node3  10.15.26.253


## 刚改主机名

# hostnamectl set-hostname [xxxx]


## 关闭防火墙

# systemctl stop firewalld && systemctl disable firewalld

部署 k8s 集群

安装 docker

## 安装必要的依赖工具

# yum install -y yum-utils device-mapper-persistent-data lvm2


## 导入 docker yum 源

# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


## 安装 docker-ce

# yum -y install docker-ce docker-ce-selinux


## 启动 docker 服务

# systemctl enable docker && systemctl start docker


## 更改 docker 中Cgroup Driver 为 systemd

# cat << EOF > /etc/docker/daemon.json

{

   "exec-opts": ["native.cgroupdriver=systemd"]

}

EOF


## 重启 docker 服务

# systemctl restart docker

安装 kubeadm

## 加载模块

# modprobe br_netfilter


## 允许 iptables 检查桥接流量

# cat <

br_netfilter

EOF


# cat <

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

# sudo sysctl --system


## 导入 kubernetes yum源

# cat < /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

EOF


## 安装 kubeadm、kubelet、kubectl

# yum install -y kubeadm-1.21.9 kubectl-1.21.9 kubelet-1.21.9


## 启动 kubelet 服务

# systemctl enable kubelet && systemctl start kubelet

master 节点生成配置文件

## 生成配置文件

# kubeadm config print init-defaults  > /etc/kubernetes/kubeadmin-config.yaml


## 修改配置文件

# cat /etc/kubernetes/kubeadmin-config.yaml

apiVersion: kubeadm.k8s.io/v1beta2

bootstrapTokens:

- groups:

 - system:bootstrappers:kubeadm:default-node-token

 token: abcdef.0123456789abcdef

 ttl: 24h0m0s

 usages:

 - signing

 - authentication

kind: InitConfiguration

localAPIEndpoint:

 advertiseAddress: 10.15.26.250 ##master节点地址

 bindPort: 6443

nodeRegistration:

 criSocket: /var/run/dockershim.sock

 name: node

 taints: null

---

apiServer:

 timeoutForControlPlane: 4m0s

apiVersion: kubeadm.k8s.io/v1beta2

certificatesDir: /etc/kubernetes/pki

clusterName: kubernetes

controllerManager: {}

dns:

 type: CoreDNS

etcd:

 local:

   dataDir: /var/lib/etcd

imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers ##更改镜像仓库地址

kind: ClusterConfiguration

kubernetesVersion: 1.21.0

networking:

 dnsDomain: cluster.local

 podSubnet: "192.168.0.0/16"

 serviceSubnet: 10.96.0.0/16

scheduler: {}

master 节点初始化

# kubeadm init --config=/etc/kubernetes/kubeadmin-config.yaml

......


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 10.15.26.250:6443 --token abcdef.0123456789abcdef \

       --discovery-token-ca-cert-hash sha256:bcc2606c473fdf9855190012552070d12245ab3b353bd7adc35157204c60fdb4

       

## 使 kubectl 正常工作,参考上步输出的结果

## root 用户

# export KUBECONFIG=/etc/kubernetes/admin.conf

# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile

node 节点加入 k8s集群

# kubeadm join 10.15.26.250:6443 --token abcdef.0123456789abcdef \

>         --discovery-token-ca-cert-hash sha256:bcc2606c473fdf9855190012552070d12245ab3b353bd7adc35157204c60fdb4

[preflight] Running pre-flight checks

       [WARNING Hostname]: hostname "node2" could not be reached

       [WARNING Hostname]: hostname "node2": lookup node2 on 100.100.2.138:53: no such host

[preflight] Reading configuration from the cluster...

[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'

[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"

[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"

[kubelet-start] Starting the kubelet

[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...


This node has joined the cluster:

* Certificate signing request was sent to apiserver and a response was received.

* The Kubelet was informed of the new secure connection details.


Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

集群信息

安装 flannel 网络插件

## 下载

# wget  https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml


## 修改 "Network": "192.168.0.0/16" 为安装时指定的 Pod CIDR(--pod-network-cidr)


## 部署 flannel

# kubectl apply -f kube-flannel.yml

部署 ingress

## 安装 helm

# wget https://get.helm.sh/helm-v3.8.1-linux-amd64.tar.gz

tar -zxvf helm-v3.8.1-linux-amd64.tar.gz

# mv linux-amd64/helm /usr/local/bin && chmod +x /usr/local/bin/helm


## 添加 repo

# helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

# helm repo update


## 编写 values.yaml

# cat < ingress-nginx-values.yaml

controller:

 image:

   registry: registry.cn-shanghai.aliyuncs.com/viper

   image: ingress-nginx-controller

   digest: sha256:bc30cb296e7548162afd9601f6b96261dcca8263e05b962694d1686b4d5a9584

 watchIngressWithoutClass: true

 hostNetwork: true

 hostPort:

   enabled: true

   ports:

     http: 80

     https: 443

 kind: DaemonSet

 nodeSelector:

   ingress: "true"


 admissionWebhooks:

   patch:

     image:

       registry: registry.cn-shanghai.aliyuncs.com/viper

       image: kube-webhook-certgen

       digest: sha256:78351fc9d9b5f835e0809921c029208faeb7fbb6dc2d3b0d1db0a6584195cfed

EOF


## 对 master 节点添加标签 ingress=true 并取消 master 节点污点(由于资源紧张,复用资源)

# kubectl label no master ingress=true

# kubectl taint no --all node-role.kubernetes.io/master-


## 部署 ingress-controller

# helm install ingress-nginx ingress-nginx/ingress-nginx --version=4.0.8 -f ingress-nginx-values.yaml -n ingress-nginx --create-namespace

集群信息

****更多功能及特性欢迎交流VX****

rr598199825

参考

kubeadm 安装参考:

https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

calico 安装参考:

https://projectcalico.docs.tigera.io/archive/v3.20/getting-started/kubernetes/quickstart

erda 安装参考:

https://docs.erda.cloud/2.0/manual/install/helm-install/helm-install-demo.html


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
存储 机器学习/深度学习 算法
​​LLM推理效率的范式转移:FlashAttention与PagedAttention正在重塑AI部署的未来​
本文深度解析FlashAttention与PagedAttention两大LLM推理优化技术:前者通过分块计算提升注意力效率,后者借助分页管理降低KV Cache内存开销。二者分别从计算与内存维度突破性能瓶颈,显著提升大模型推理速度与吞吐量,是当前高效LLM系统的核心基石。建议收藏细读。
1099 125
|
机器学习/深度学习 存储 并行计算
Ascend上的PageAttention
PageAttention旨在解决大型语言模型(LLM)服务中的内存管理低效问题,如内存碎片化、利用率低及缺乏灵活的内存共享机制。通过借鉴操作系统中的虚拟内存和分页技术,PageAttention实现了块级别的内存管理和灵活的KV cache共享机制,显著提高内存利用率,降低延迟,提升模型处理速度和性能。相比传统注意力机制,PageAttention通过分段处理序列,有效解决了长序列处理时的计算效率低下和内存过度使用问题。
|
10月前
|
人工智能 编解码 测试技术
云电脑显卡性能终极对决:ToDesk云电脑/顺网云/海马云,谁才是4K游戏之王?
本文对比了ToDesk云电脑、顺网云和海马云三大平台的性能表现,涵盖游戏实战与AI模型测试。ToDesk云电脑搭载RTX 5090显卡,在4K游戏与大模型支持上表现卓越;顺网云适合中轻度游戏玩家,强调即开即用的便捷性;海马云面向企业用户,提供稳定算力与多任务支持。评测从显卡、处理器、压力测试到网络传输技术全面展开,最终推荐:硬核玩家首选ToDesk云电脑,内容创作者可选ToDesk云电脑或海马云,企业用户则更适合海马云。
2149 23
|
存储 监控 固态存储
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN 分布式存储虚拟化平台VMDK文件1KB问题数据恢复案例
在一例vSAN分布式存储故障中,因替换故障闪存盘后磁盘组失效,一台采用RAID0策略且未使用置备的虚拟机VMDK文件受损,仅余1KB大小。经分析发现,该VMDK文件与内部虚拟对象关联失效导致。恢复方案包括定位虚拟对象及组件的具体物理位置,解析分配空间,并手动重组RAID0结构以恢复数据。此案例强调了深入理解vSAN分布式存储机制的重要性,以及定制化数据恢复方案的有效性。
408 5
|
存储 关系型数据库 分布式数据库
PolarDB产品使用问题之如何在本地进行部署
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
1617 1
|
前端开发 Java Spring
ssm中spring mvc找不到控制器,报错404
ssm中spring mvc找不到控制器,报错404
|
安全 物联网 智能硬件
低功耗广域网的代表主要有LORA和NB-IOT和TPUNB
本文对比介绍了三种低功耗广域网技术——LoRa、NB-IoT和TPUNB。LoRa利用扩频技术实现远距离、低功耗通信,适用于智能城市和环境监测。NB-IoT基于蜂窝网络,提供广覆盖和长电池寿命,常用于智能电表和智能停车。TPUNB是技象科技的自主LPWAN技术,具备高安全性和抗干扰性,适用于智慧城市和工业物联网。这些技术各有优势,满足不同场景需求,推动了物联网的发展。
1355 1
|
存储 算法 搜索推荐
【C++ 数据结构与算法 一站式备考指南】一文掌握 数据结构与算法课程 知识点(二)
【C++ 数据结构与算法 一站式备考指南】一文掌握 数据结构与算法课程 知识点
471 2
|
机器学习/深度学习 算法
大模型开发:解释反向传播算法是如何工作的。
反向传播算法是训练神经网络的常用方法,尤其适用于多层前馈网络。它包括前向传播、计算损失、反向传播和迭代过程。首先,输入数据通过网络层层传递至输出层,计算预测值。接着,比较实际输出与期望值,计算损失。然后,从输出层开始,利用链式法则反向计算误差和权重的梯度。通过梯度下降等优化算法更新权重和偏置,以降低损失。此过程反复进行,直到损失收敛或达到预设训练轮数,优化模型性能,实现对新数据的良好泛化。
843 4
|
前端开发 Java 关系型数据库
「架构」分层架构
**分层架构**是软件设计的关键模式,它将应用划分为独立层,如表示层、业务逻辑层和数据访问层,强调**单一职责**和**松耦合**。优点包括**代码组织**、**技术多样性**、**团队协作**和**可扩展性**,但可能带来**性能影响**和**设计复杂性**。通过定义清晰接口和合理划分层次来管理。常用技术栈涉及Web前端、后端框架、数据库、ORM和通信协议等。
523 0