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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Prometheus 监控 Kubernetes
【云原生】k8s集群资源监控平台搭建—20230227
【云原生】k8s集群资源监控平台搭建—20230227
139 0
|
5月前
|
弹性计算 Prometheus 监控
从自建开源 Prometheus 迁移到阿里云托管 Prometheus 服务
阿里云可观测监控 Prometheus 版提供高性能、高可用、全托管的监控服务,对接开源生态,支持 Kubernetes、ECS 等场景,解决了自建 Prometheus+Thanos 高成本、运维复杂的问题。本文讨论在各个典型场景下的迁移方案。
12062 73
|
4月前
|
数据采集 弹性计算 Prometheus
重磅升级!从自建Prometheus到阿里云托管:无缝迁移,监控能力全面飞跃
【8月更文挑战第2天】如何从自建开源 Prometheus 迁移到阿里云托管 Prometheus 服务
95 2
|
运维 Kubernetes Cloud Native
应用纳管和灰度发布:谐云基于 KubeVela 的企业级云原生实践
谐云通过类比事务的方式,将渲染过程分为正向和逆向,同时将首次纳管和真正的纳管动作进行了分离,完成了平台升级的同时,给应用的纳管行为留下了一定的可操作空间。
应用纳管和灰度发布:谐云基于 KubeVela 的企业级云原生实践
|
缓存 运维 Kubernetes
CNStack 多集群服务:基于 OCM 打造完善的集群管理能力
CNStack 多集群服务:基于 OCM 打造完善的集群管理能力
CNStack 多集群服务:基于 OCM 打造完善的集群管理能力
|
容灾 Serverless
《云迁移与云容灾-Serverless架构企业数据备份和迁移》电子版地址
云迁移与云容灾-Serverless架构企业数据备份和迁移
535 0
《云迁移与云容灾-Serverless架构企业数据备份和迁移》电子版地址
|
消息中间件 Kubernetes JavaScript
从零自建FaaS平台(3):Kubeless
Kubeless是基于Kubernetes的原生无服务器框架,其允许用户部署少量的代码(函数),而无需担心底层架构。它被设计部署在Kubernetes集群之上,并充分利用Kubernetes的特性及资源类型。可以克隆在AWS Lambda,Azure Functions、Google Cloud Functions上的内容。
241 0
|
Kubernetes IDE 前端开发
使用 Nocalhost 与 KubeVela 端云联调,一键完成多集群混合云环境部署
在云原生快速发展的当下,如何让云的技术赋能业务开发?在上线应用时,如何让云的开发者在现代化的多集群、混合云环境中便捷地进行应用的开发和调试?在部署过程中,又该如何让应用部署具备充分的验证和可靠性? 这些至关重要的问题,都是我们急需解决的。 在本文中,我们将结合 KubeVela 以及 Nocalhost 开源项目,给出一个基于 Kubernetes 和容器生态的端云联调、一键完成多集群混合环境部署的解决方案,来回答上述问题。
406 3
使用 Nocalhost 与 KubeVela 端云联调,一键完成多集群混合云环境部署
|
运维 安全 Devops
|
存储 Kubernetes Cloud Native
erda 开源产品纳管自建k8s集群(二)
Erda 是新一代数字化云原生 PaaS 平台,其核心包含三大模块:应用(微服务)研发治理平台、快数据治理平台和混合云管理平台。是基于 K8s 的应用开发管理平台,而并非一个 K8s 发行版本,也不是一个 K8s 管理平台。