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搭建和管理企业级网站应用
相关文章
|
Kubernetes Cloud Native 数据可视化
【云原生】Rancher部署k8s集群流程—2023.03
【云原生】Rancher部署k8s集群流程—2023.03
972 0
|
Prometheus 监控 Kubernetes
【云原生】k8s集群资源监控平台搭建—20230227
【云原生】k8s集群资源监控平台搭建—20230227
171 0
|
3月前
|
运维 Kubernetes Cloud Native
云原生时代下的应用部署与管理
【10月更文挑战第38天】在数字化浪潮中,云原生技术正引领着软件开发和运维的革命。本文将探讨云原生的核心概念、优势以及如何通过代码示例实现应用的快速部署和管理,旨在为读者提供一套清晰的云原生应用部署和管理的实践指南。
|
6月前
|
数据采集 弹性计算 Prometheus
重磅升级!从自建Prometheus到阿里云托管:无缝迁移,监控能力全面飞跃
【8月更文挑战第2天】如何从自建开源 Prometheus 迁移到阿里云托管 Prometheus 服务
140 2
|
6月前
|
监控 Oracle 关系型数据库
PolarDB 在多云环境下的部署与管理
【8月更文第27天】随着云计算的普及和发展,越来越多的企业开始采用多云策略来分散风险、优化成本并提高业务灵活性。阿里云的 PolarDB 是一种兼容 MySQL、PostgreSQL 和 Oracle 的关系型数据库服务,它提供了高性能、高可用性和自动化的管理功能。本文将探讨如何在多云环境下部署和管理 PolarDB 实例,并提供一些实用的代码示例。
158 0
|
运维 Kubernetes 容器
《分布式数据库系统TiDB在Kubernetes平台的自动化运维实践》电子版地址
分布式数据库系统TiDB在Kubernetes平台的自动化运维实践
93 0
《分布式数据库系统TiDB在Kubernetes平台的自动化运维实践》电子版地址
|
运维 Kubernetes 容器
《腾讯云多Kubernetes集群高可用运维实践》电子版地址
腾讯云多Kubernetes集群高可用运维实践
278 0
《腾讯云多Kubernetes集群高可用运维实践》电子版地址
|
存储 弹性计算 Prometheus
阿里云注册集群+Prometheus 解决多云容器集群运维痛点
面对跨区跨云厂商容器集群混用场景,我们该如何借助Prometheus+Grafana实现容器集群监控?立刻查看本文吧!
阿里云注册集群+Prometheus 解决多云容器集群运维痛点
|
Kubernetes 监控 Cloud Native
云原生系列二:如何实现跨数百个K8s集群的管理
​  今天就由叶秋学长带领大家学习云原生专栏系列二:如何实现跨数百个K8s集群的管理? Intuit 实现数百个K8s集群的管理 Intuit公司成立于1983年。它以个人财经软件为主要产品。2019年10月入选《财富》杂志“2019未来50强榜单”,排第21位。截至当年,Intuit公司4大BU、30个业务部门运行了大约160个K8s集群,大约5400个名称空间,每天要进行1300次的部署。那么他是如何做到,今天我们做一个简单的讲解。 首先就是为什么Intuit公司要划分如此多的集群?他们希望在不同的业务部门之间实现隔离,并且各业务部门能够拥有自主权;其次,为了满足合规,将审计限
456 0
云原生系列二:如何实现跨数百个K8s集群的管理
|
存储 Kubernetes Cloud Native
erda 开源产品纳管自建k8s集群(二)
Erda 是新一代数字化云原生 PaaS 平台,其核心包含三大模块:应用(微服务)研发治理平台、快数据治理平台和混合云管理平台。是基于 K8s 的应用开发管理平台,而并非一个 K8s 发行版本,也不是一个 K8s 管理平台。