tnblog
首页
视频
资源
登录

Kubernetes DANM

5098人阅读 2022/10/31 18:16 总访问:3466991 评论: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

评价
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
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
欢迎加群交流技术