Giter VIP home page Giter VIP logo

netcon-problem-management-subsystem's People

Contributors

dependabot[bot] avatar motacapla avatar proelbtn avatar renovate[bot] avatar say3no avatar sharknasuhorse avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

unikzforce

netcon-problem-management-subsystem's Issues

ncletのhealthcheckが不十分な部分を修正する

DockerコンテナがStopしていることがハンドリングされていない

ready := false
if containerInfo.State.Health == nil {
// If containerInfo doesn't have Health, we can consider the container is ready
ready = true
} else if containerInfo.State.Health.Status == "healthy" {
// If Health.Status is "healthy", we can consider the container is ready
// ref: https://pkg.go.dev/github.com/docker/docker/api/types#Health
ready = true
}

score-server 結合上の新規エンドポイントについて

ほしい

  1. [GET] problems で 問題の一覧を返す
  2. [GET] problems/:problem_name で その問題の環境一覧を返す(name と state だけでいい)
  3. [GET] problems/:problem_name/:problem_env で問題環境を返す
    • [GET] /problem/:uniq_pe_name の rename
  4. [POST] problems/:problem_name/:problem_env で Change State: available to assigned
  5. [DELETE] problems/:problem_name/:problem_env
    • [DELETE] /problem/:uniq_pe_name の rename

ASIS

  • /
    • GET ... hello
  • /problem
    • POST ... Change State: available to assigned (名前違うかも)
  • /problem/:uniq_pe_name
    • GET ... response problem envs
    • DELETE ... del

特定の make test が成功しない

#63 にて、

@say3no
このPRでProblem controllerのテストを一つ追加してみたんですが、C-planeを起動させることができないっぽくエラーが出ているので確認していただけますか?

ユーザがSSH/docker execで接続するための仕組みを実装する

Summary

ユーザがSSHで接続するための仕組みを実装する。

具体的には、以下のタスクを実施する。

  • ProblemEnvironmentに接続するための仕組みを考える
    • ユーザ名の命名規則?パスワードはどうやって生成する?
  • 環境に接続するための仕組みを実装する

Workerを自動でjoinさせるための実装をする

Summary

AS-IS

TO-BE

  • ncletが起動した時にhostnameを取得し、対応するWorkerリソースを作成する
  • 自身が作成したWorkerリソースに割り当てられたProblemEnvironmentをinstantiateする

Problem controllerの実装をする

Summary

Problem controllerを実装する。

ProblemEnvironmentを割り当て状況に合わせて自動でスケールさせる実装を行う。

JANOG51-CustomResources and controllers drawio (5)

具体的には、以下のタスクを実施する。

  • どんなスケジューリングアルゴリズムでProblemEnvironmentを実装するのかを考える
  • ref: netcon-vm-management-server
  • スケジューリングアルゴリズムに必要なfieldをapi/v1alpha1に追加する
  • Problemリソースをwatchし、.specに書かれた分のProblemEnvironmentを作成する
    • controller-managerにproblem_controller.goを追加して必要なアルゴリズムを実装する
  • ProblemEnvironmentリソースの状態をwatchし、ProblemEnvironmentが適切な数であり続けるのを確認する

Operation Guideを作成する

「インフラ班の人ならデバッグができる」という状態にするために、オペレーションガイドを作成してdoc以下に配置する

ProblemEnvironmentのstatusを修正する

kubectlからコンテナの詳細情報を取得できるようにするために表示したい内容を結合したフィールドを用意していたが、今はkubectl-netconによって表示内容を変えることができるようになっている。そのため、この部分をあるべき状態に修正する。

type ContainersStatus struct {
Summary string `json:"summary" yaml:"summary"`
Details []ContainerDetailStatus `json:"details" yaml:"details"`
}

cEOSのSSH認証がkeyboard-interactiveなせいでログインできない問題を解消する

普通

debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /Users/jp26081/.ssh/id_ed25519 ED25519 SHA256:W2HAh02br+R7a1R7J6z/4bghgFJpiLNBpruY+gjLN9Q agent
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: /home1/irteamsu/.ssh/id_rsa RSA SHA256:L6zMBR/u4tHwEt8eJQPWB8PaDeEH1nnHmoEfLpNgfLY agent
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /Users/jp26081/.ssh/id_rsa
debug1: Trying private key: /Users/jp26081/.ssh/id_dsa
debug1: Trying private key: /Users/jp26081/.ssh/id_ecdsa
debug1: Trying private key: /Users/jp26081/.ssh/id_ecdsa_sk
debug1: Trying private key: /Users/jp26081/.ssh/id_ed25519_sk
debug1: Trying private key: /Users/jp26081/.ssh/id_xmss
debug1: Next authentication method: password
[email protected]'s password:

cEOS

debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Trying private key: /home/netcon/.ssh/id_rsa
debug1: Trying private key: /home/netcon/.ssh/id_ecdsa
debug1: Trying private key: /home/netcon/.ssh/id_ecdsa_sk
debug1: Offering public key: /home/netcon/.ssh/id_ed25519 ED25519 SHA256:ZUMhT2ZFYxHireEdrQvtchLve7saHhGkVly5fnXZD3k
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: Trying private key: /home/netcon/.ssh/id_ed25519_sk
debug1: Trying private key: /home/netcon/.ssh/id_xmss
debug1: Trying private key: /home/netcon/.ssh/id_dsa
debug1: Next authentication method: keyboard-interactive
([email protected]) Password:

ProblemEnvironmentをリソースを元にschedulerする

#4 の続き

  • ProblemEnvironmentをWorkerに割り当てるスケジューリングアルゴリズムを考える
    • WorkerのCPU, メモリ使用量, ...
      • workerInfo にこれらの情報を含むようにして、都度更新されるようにする (externalIPAddress/hostnameは既に都度更新されるようになってる)

ContainerLabのyamlが間違っていた時にリソースが削除されない

  1. ContainerLabのyamlが意味的に間違っていると(e.g. 存在しないNodeをつなぐリンクが存在する, ...)containerlab inspectを実行することができない
  2. これによって、ContainerLabProblemEnvironmentDriver#Checkが失敗する
  3. ContainerLabProblemEnvironmentDriver#DestroyはContainerLabProblemEnvironmentDriver#Checkに依存しているため、同じく失敗する
  4. finalizerが消えない
  5. 手動でfinalizerを消さない限り、リソースが削除されない

ProblemControllerのschedule時にリソースの取得に失敗する

nclet側で取れてセットされている値が
https://janog51.slack.com/archives/C0445UTF43G/p1668177629880719?thread_ts=1668165522.223519&cid=C0445UTF43G

problem controller側で取得できていなさそう

1.6690284553993292e+09  ERROR   failed to parse CPUUsedPercent for worker election      {"controller": "problemen
vironment", "controllerGroup": "netcon.janog.gr.jp", "controllerKind": "ProblemEnvironment", "ProblemEnvironment"
: {"name":"pro-001-t5x6s","namespace":"netcon"}, "namespace": "netcon", "name": "pro-001-t5x6s", "reconcileID": "
938884db-e5ec-4776-bd94-ec0ba32ec8e4", "error": "strconv.ParseFloat: parsing \"\": invalid syntax"}
github.com/janog-netcon/netcon-problem-management-subsystem/controllers/controller-manager.(*ProblemEnvironmentRe
conciler).electWorker
        /workspace/controllers/controller-manager/problemenvironment_controller.go:132
github.com/janog-netcon/netcon-problem-management-subsystem/controllers/controller-manager.(*ProblemEnvironmentRe
conciler).schedule
        /workspace/controllers/controller-manager/problemenvironment_controller.go:198
github.com/janog-netcon/netcon-problem-management-subsystem/controllers/controller-manager.(*ProblemEnvironmentRe
conciler).Reconcile
        /workspace/controllers/controller-manager/problemenvironment_controller.go:73
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile
        /go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:121
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler
        /go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:320
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
        /go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:273
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2
        /go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:234
1.6690284553995066e+09  ERROR   failed to parse MemoryUsedPercent for worker election   {"controller": "problemen
vironment", "controllerGroup": "netcon.janog.gr.jp", "controllerKind": "ProblemEnvironment", "ProblemEnvironment"
: {"name":"pro-001-t5x6s","namespace":"netcon"}, "namespace": "netcon", "name": "pro-001-t5x6s", "reconcileID": "
938884db-e5ec-4776-bd94-ec0ba32ec8e4", "error": "strconv.ParseFloat: parsing \"\": invalid syntax"}
github.com/janog-netcon/netcon-problem-management-subsystem/controllers/controller-manager.(*ProblemEnvironmentRe
conciler).electWorker
        /workspace/con

ProblemEnvironmentのschedulerの実装をする

Summary

ProblemEnvironmentのschedulerの実装を行う。

具体的には、以下のタスクを実施する。

  • 割り当てられたProblemEnvironment数を元にProblemEnvironmentをWorkerに割り当てる

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.