tnblog
首页
视频
资源
登录

Kubernetes DANM

5469人阅读 2022/10/31 18:16 总访问:3660597 评论:0 收藏:0 手机
分类: 容器编排

Kubernetes DANM

只支持Kubernetes 1.17.X - 1.19.X的版本。

DANM 简介


DANM是诺基亚将电信级网络管理引入Kubernetes集群的解决方案!DANM在公司已有4年多的历史,目前已投入生产,最终在GitHub上为所有人提供。

其主要功能是为Pod提供多个网络接口与网卡的关联,这样使得更多CNI插件可以共同管理与关联,且互不影响。并且所链接的网络模式可以是L3,L2等模式。

安装DANM


首先克隆DANM到本地,并执行./build_danm.sh脚本完成安装(国内用户还不可以)。

  1. git clone https://github.com/nokia/danm.git
  2. cd danm
  3. ./build_danm.sh


要想启动它需要有4个容器镜像:

镜像 描述
danm-cni-plugins 此图包含核心CNI插件(danm、fakeipam)。稍后,它将被部署为一个DaemonSet,将这些二进制文件放置在每个Kubernetes节点中。
netwatcher 镜像将由netwatcher守护程序集使用
webhook 此图像将由webhook部署使用
svcwatcher 如果您选择安装,svcwatcher守护程序集将使用此镜像。

国内手动安装安装


首先先将项目克隆到本地。

  1. git clone https://github.com/nokia/danm.git
  2. cd danm

扩展 Kubernetes API


有两种可选的安装方式:

1.轻量级:通过从项目根目录执行以下命令,使用DanmNet和DanmEp CRD对象扩展Kubernetes API,以简化网络管理体验:

  1. kubectl create -f integration/crds/lightweight


2.生产:通过从项目根目录执行以下命令,使用TenantNetwork、ClusterNetwork、TenantConfig和DanmEp CRD对象扩展Kubernetes API,以获得支持多租户的生产级网络管理体验:

  1. kubectl create -f integration/crds/production


这里我们选择轻量级的即可。

创建 DANM CNI 服务帐户


为了完成其工作,DANM需要一个服务帐户来访问集群,并为该帐户提供必要的RBAC角色。
我们还需要提取此服务帐户的令牌,因为下一步将需要它:

  1. kubectl create --namespace kube-system serviceaccount danm
  2. vim danm-secret.yaml
  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. name: danm
  5. namespace: kube-system
  6. annotations:
  7. kubernetes.io/service-account.name: danm
  8. type: kubernetes.io/service-account-token
  1. kubectl create -f danm-secret.yaml
  2. SERVICEACCOUNT_TOKEN=$(kubectl get --namespace kube-system secrets danm -o jsonpath='{.data.token}' | base64 -d)

创建有效的CNI配置文件


根据以下ecxample配置,将有效的CNI配置文件放入所有kubelet节点的CNI目录(默认为/etc/cni/net.d/00-danm.conf):

  1. {
  2. "cniVersion": "0.3.1",
  3. "name": "meta_cni",
  4. "name_comment": "Mandatory parameter, but can be anything",
  5. "type": "danm",
  6. "type_comment": "Mandatory parameter according to CNI spec, MUST be set to danm",
  7. "kubeconfig": "/etc/kubernetes/kubeconfig/danmc.yml",
  8. "kubeconfig_comment": "Mandatory parameter, must point to a valid kubeconfig file containing the necessary RBAC setting for DANM's service account",
  9. "cniDir": "/etc/cni/net.d",
  10. "cniDir_comment": "Optional parameter, if defined CNI config files for static delegates are searched here. Default value is /etc/cni/net.d",
  11. "namingScheme": "awesome",
  12. "namingScheme_comment": "Optional parameter, if it is set to legacy container network interface names are set exactly to DanmNet.Spec.Options.container_prefix, otherwise prefix simply behaves as a prefix and is suffixed with a sequence ID. Default value is empty (e.g. not legacy)"
  13. }


在创建时,kubeconfig参数可以指定DANM的配置,但创建kubeconfig之前我们还需要创建其中运用到的环境变量:集群名称、集群服务器、集群证书。

  1. CLUSTER_NAME=$(kubectl config view -o jsonpath='{.clusters[0].name}')
  2. CLUSTER_SERVER=$(kubectl config view -o jsonpath='{.clusters[0].cluster.server}')
  3. CLUSTER_CA_CERTIFICATE=$(kubectl config view --flatten -o jsonpath='{.clusters[0].cluster.certificate-authority-data}')


然后我们创建kubeconfig文件。

  1. mkdir /etc/kubernetes/kubeconfig/ -p
  2. vim /etc/kubernetes/kubeconfig/danmc.yml
  1. apiVersion: v1
  2. kind: Config
  3. current-context: default
  4. clusters:
  5. - cluster:
  6. certificate-authority-data: ${CLUSTER_CA_CERTIFICATE}
  7. server: ${CLUSTER_SERVER}
  8. name: ${CLUSTER_NAME}
  9. contexts:
  10. - context:
  11. cluster: ${CLUSTER_NAME}
  12. user: danm
  13. name: default
  14. users:
  15. - name: danm
  16. user:
  17. token: ${SERVICEACCOUNT_TOKEN}
  18. preferences: {}


还需要一定的RBAC权限,方便DANM正常运行

  1. kubectl create -f integration/cni_config/danm_rbac.yaml

导入镜像


docker的方式

  1. docker pull danmcni/damn-installer:latest
  2. docker pull danmcni/danm-cni-plugins:latest
  3. docker pull danmcni/webhook:latest
  4. docker pull danmcni/svcwatcher:latest
  5. docker pull danmcni/netwatcher:latest
  6. # 转本地
  7. docker tag danmcni/damn-installer:latest damn-installer:latest
  8. docker tag danmcni/danm-cni-plugins:latest danm-cni-plugins:latest
  9. docker tag danmcni/webhook:latest webhook:latest
  10. docker tag danmcni/svcwatcher:latest svcwatcher:latest
  11. docker tag danmcni/netwatcher:latest netwatcher:latest

创建CNI插件DaemonSet


生成工具

  1. cd cmd/danm/
  2. go build danm.go
  3. cd ../../
  4. cd cmd/fakeipam/
  5. go build fakeipam.go


在创建CNI插件之前我们需要将DANM的cni工具(danm与fakeipam)放到我们的/opt/cni/bin目录下面。

  1. cd danm
  2. chmod +x cmd/danm/danm cmd/fakeipam/fakeipam
  3. cp cmd/danm/danm /opt/cni/bin
  4. cp cmd/fakeipam/fakeipam /opt/cni/bin
  5. ls /opt/cni/bin/


安装到其他节点上

  1. scp cmd/danm/danm node01:/opt/cni/bin/
  2. scp cmd/fakeipam/fakeipam node01:/opt/cni/bin/


修改cni_plugins目录下的cni_plugins_ds.yaml

  1. yum install -y jq
  2. kubectl create -f integration/manifests/cni_plugins
  3. kubectl get pod -n kube-system

创建 NetWatcher


修改NetWatcher文件中的镜像改为danmcni/netwatcher.

  1. vim integration/manifests/netwatcher/netwatcher_ds.yaml


通过从项目的根目录执行以下命令创建netwatcher守护程序集:

  1. kubectl create -f integration/manifests/netwatcher/

部署 Webhook


通过从项目的根目录执行以下命令,创建webhookDeployment并为其提供证书:
以下脚本需要jq工具和openssl;请确保安装了它们。

  1. sudo chmod +x ./integration/manifests/webhook/webhook-create-signed-cert.sh
  2. sudo chmod +x ./integration/manifests/webhook/webhook-patch-ca-bundle.sh
  3. sed -i 's/v1beta1/v1/g' ./integration/manifests/webhook/webhook-create-signed-cert.sh
  4. vim ./integration/manifests/webhook/webhook-create-signed-cert.sh
  5. # 添加signerName
  6. # spec.signerName: kubernetes.io/legacy-unknown
  7. ./integration/manifests/webhook/webhook-create-signed-cert.sh
  8. cat ./integration/manifests/webhook/webhook.yaml | \
  9. ./integration/manifests/webhook/webhook-patch-ca-bundle.sh > \
  10. ./integration/manifests/webhook/webhook-ca-bundle.yaml
  11. vim ./integration/manifests/webhook/webhook-ca-bundle.yaml

  1. kubectl create -f integration/manifests/webhook/webhook-ca-bundle.yaml


安装Svcwatcher,需要替换一下镜像名

  1. kubectl create -f integration/manifests/svcwatcher/

未完待续。。。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

cAPS.net 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request["imgBase"]; //c#里边的base6...

Quartz.net实例动态改变周期调度。misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.net Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

c、VB.net中全角半角转换方法

///<summary> ///转全角的函数(SBCcase) ///</summary> ///<paramname="input">任意字符串...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial("_分部页")第二种:@{ Html.RenderPartial("分部页");}...

.net实现QQ邮箱发送邮件功能

1、微软已经帮我们封装好了发送邮件的类MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。Mai...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

windows 自带的netsh进行端口映射

使用netsh 把本地任意ip的25566端口 映射到192.168.81.234的25565端口netshinterfaceportproxyaddv4tov4listenaddress=0.0....

确保.net程序始终以管理员身份运行

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...

ASP.net Timer细节处理

Timer的用法:1:本人称之为计时器,是asp.net官方的一种。用法即是计时所用 2:关于计时有很多中方式,本人学识有限,暂...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

asp.net主动推送百度seo

虽然可以使用百度提供的js自动推送,但是估计度娘还是希望主动推送一点。哈哈^_^,女孩子嘛大多都喜欢被动一点。publicclass...
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术