mirror of
https://github.com/kubesphere/kubekey.git
synced 2025-12-26 01:22:51 +00:00
Supports installing docker and conatinerd using binaries
Signed-off-by: pixiake <guofeng@yunify.com>
This commit is contained in:
parent
8a15b68e72
commit
e79bd0d772
|
|
@ -41,7 +41,7 @@ const (
|
|||
DefaultEtcdPort = "2379"
|
||||
DefaultDockerVersion = "20.10.8"
|
||||
DefaultCrictlVersion = "v1.22.0"
|
||||
DefaultKubeVersion = "v1.19.8"
|
||||
DefaultKubeVersion = "v1.20.10"
|
||||
DefaultCalicoVersion = "v3.20.0"
|
||||
DefaultFlannelVersion = "v0.12.0"
|
||||
DefaultCniVersion = "v0.9.1"
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
| v1.19.9 | :white_check_mark: |
|
||||
| v1.20.4 | :white_check_mark: |
|
||||
| v1.20.6 | :white_check_mark: |
|
||||
| v1.20.10 | :white_check_mark: |
|
||||
| v1.21.4 | :white_check_mark: |
|
||||
| v1.22.1 | :white_check_mark: |
|
||||
|
||||
|
|
@ -44,5 +45,6 @@
|
|||
| v1.19.9 | :white_check_mark: |
|
||||
| v1.20.4 | :white_check_mark: |
|
||||
| v1.20.6 | :white_check_mark: |
|
||||
| v1.20.10 | :white_check_mark: |
|
||||
| v1.21.4 | :white_check_mark: |
|
||||
| v1.22.1 | :white_check_mark: |
|
||||
|
|
|
|||
63
go.sum
63
go.sum
|
|
@ -5,7 +5,6 @@ cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSR
|
|||
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
|
||||
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
|
||||
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
|
||||
cloud.google.com/go v0.46.3 h1:AVXDdKsrtX33oR9fbCMu/+c1o8Ofjq6Ku/MInaLVg5Y=
|
||||
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
|
||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||
|
|
@ -14,7 +13,6 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k
|
|||
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
||||
github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
|
||||
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
|
||||
|
|
@ -27,7 +25,6 @@ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbt
|
|||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/DATA-DOG/go-sqlmock v1.4.1 h1:ThlnYciV1iM/V0OSF/dtkqWb6xo5qITT1TJBG1MRDJM=
|
||||
github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
||||
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
|
||||
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU=
|
||||
|
|
@ -41,9 +38,7 @@ github.com/Masterminds/sprig/v3 v3.1.0/go.mod h1:ONGMf7UfYGAbMXCZmQLy8x3lCDIPrEZ
|
|||
github.com/Masterminds/squirrel v1.4.0 h1:he5i/EXixZxrBUWcxzDYMiju9WZ3ld/l7QBNuo/eN3w=
|
||||
github.com/Masterminds/squirrel v1.4.0/go.mod h1:yaPeOnPG5ZRwL9oKdTsO/prlkPbXWZlRVMQ/gGlzIuA=
|
||||
github.com/Masterminds/vcs v1.13.1/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA=
|
||||
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 h1:ygIc8M6trr62pF5DucadTWGdEB4mEyvzi0e2nbcmcyA=
|
||||
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
|
||||
github.com/Microsoft/hcsshim v0.8.7 h1:ptnOoufxGSzauVTsdE+wMYnCWA301PdoN4xg5oRdZpg=
|
||||
github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
|
||||
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||
|
|
@ -54,7 +49,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
|
|||
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs=
|
||||
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
|
||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
||||
|
|
@ -87,20 +81,14 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce
|
|||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||
github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y=
|
||||
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
|
||||
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
|
||||
github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||
github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
|
||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
||||
github.com/bshuster-repo/logrus-logstash-hook v0.4.1 h1:pgAtgj+A31JBVtEHu2uHuEx0n+2ukqUJnS2vVe5pQNA=
|
||||
github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
|
||||
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng=
|
||||
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
|
||||
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ=
|
||||
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
|
||||
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o=
|
||||
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
|
||||
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
||||
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
||||
|
|
@ -115,7 +103,6 @@ github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4
|
|||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
||||
github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f h1:tSNMc+rJDfmYntojat8lljbt1mgKNpTxUZJsSzJ9Y1s=
|
||||
github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
|
||||
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
||||
github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
|
|
@ -123,7 +110,6 @@ github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMX
|
|||
github.com/containerd/containerd v1.3.4 h1:3o0smo5SKY7H6AJCmJhsnCjR2/V2T8VmiHt7seN2/kI=
|
||||
github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||
github.com/containerd/continuity v0.0.0-20200107194136-26c1120b8d41 h1:kIFnQBO7rQ0XkMe6xEwbybYHBEaWmh/f++laI6Emt7M=
|
||||
github.com/containerd/continuity v0.0.0-20200107194136-26c1120b8d41/go.mod h1:Dq467ZllaHgAtVp4p1xUQWBrFXR9s/wyoTpG8zOJGkY=
|
||||
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
|
||||
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
||||
|
|
@ -176,7 +162,6 @@ github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw
|
|||
github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
|
||||
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4=
|
||||
github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
|
||||
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg=
|
||||
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
|
||||
|
|
@ -189,7 +174,6 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
|
|||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
||||
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
|
||||
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=
|
||||
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
|
||||
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||
github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
|
||||
|
|
@ -211,7 +195,6 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2
|
|||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7 h1:LofdAjjjqCSXMwLGgOgnE+rdPuvX9DxCqaHwKy7i/ko=
|
||||
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
|
||||
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
|
||||
|
|
@ -228,7 +211,6 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
|
|||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||
github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg=
|
||||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
|
||||
github.com/go-logr/zapr v0.1.0 h1:h+WVe9j6HAA01niTJPA/kKH0i7e0rLZBCwauQFcRE54=
|
||||
github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk=
|
||||
github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
|
||||
github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
|
||||
|
|
@ -278,17 +260,12 @@ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+
|
|||
github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
|
||||
github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4=
|
||||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||
github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
|
||||
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
|
||||
github.com/gobuffalo/envy v1.7.1 h1:OQl5ys5MBea7OGCdvPbBJWRgnhC/fGona6QKfvFeau8=
|
||||
github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w=
|
||||
github.com/gobuffalo/logger v1.0.1 h1:ZEgyRGgAm4ZAhAO45YXMs5Fp+bzGLESFewzAVBMKuTg=
|
||||
github.com/gobuffalo/logger v1.0.1/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs=
|
||||
github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4=
|
||||
github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q=
|
||||
github.com/gobuffalo/packr/v2 v2.7.1 h1:n3CIW5T17T8v4GGK5sWXLVWJhCz7b5aNLSxW6gYim4o=
|
||||
github.com/gobuffalo/packr/v2 v2.7.1/go.mod h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kETFqjFoFlOc=
|
||||
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
|
||||
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
|
||||
|
|
@ -302,7 +279,6 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV
|
|||
github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
|
||||
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
|
|
@ -351,10 +327,8 @@ github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTV
|
|||
github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk=
|
||||
github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU=
|
||||
github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||
github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33 h1:893HsJqtxp9z1SF76gg6hY70hRY1wVlTSnC/h1yUDCo=
|
||||
github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
|
|
@ -408,7 +382,6 @@ github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ
|
|||
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||
github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg=
|
||||
github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
|
||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||
|
|
@ -417,7 +390,6 @@ github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht
|
|||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
|
||||
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
|
||||
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
|
||||
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
|
||||
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
|
||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||
|
|
@ -427,7 +399,6 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
|
|||
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
|
||||
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
|
||||
|
|
@ -441,11 +412,9 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv
|
|||
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
|
||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw=
|
||||
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o=
|
||||
|
|
@ -484,7 +453,6 @@ github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/
|
|||
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||
github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
|
||||
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||
github.com/mattn/go-sqlite3 v1.12.0 h1:u/x3mp++qUxvYfulZ4HKOvVO0JWhk7HtE8lWhbGz/Do=
|
||||
github.com/mattn/go-sqlite3 v1.12.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
|
|
@ -502,7 +470,6 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu
|
|||
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ=
|
||||
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
|
||||
github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY=
|
||||
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||
|
|
@ -528,7 +495,6 @@ github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi
|
|||
github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
|
||||
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
|
||||
github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
|
||||
github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
|
||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
|
||||
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
|
||||
|
|
@ -541,13 +507,11 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W
|
|||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ=
|
||||
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||
github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
|
||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
|
||||
github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
|
||||
|
|
@ -579,7 +543,6 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9
|
|||
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
|
||||
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
|
||||
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
|
||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
||||
|
|
@ -591,7 +554,6 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
|
|||
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
|
||||
github.com/pkg/sftp v1.12.0 h1:/f3b24xrDhkhddlaobPe2JgBqfdt+gC/NYl0QY9IOuI=
|
||||
github.com/pkg/sftp v1.12.0/go.mod h1:fUqqXB5vEgVCZ131L+9say31RAri6aF6KDViawhxKK8=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||
github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
|
||||
|
|
@ -632,7 +594,6 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
|
|||
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||
github.com/rogpeppe/go-internal v1.4.0 h1:LUa41nrWTQNGhzdsZ5lTnkwbNjj6rXTdazA1cSdjkOY=
|
||||
github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||
github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351 h1:HXr/qUllAWv9riaI4zh2eXWKmCSDqVS/XH1MRHLKRwk=
|
||||
github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351/go.mod h1:DCgfY80j8GYL7MLEfvcpSFvjD0L5yZq/aZUJmhZklyg=
|
||||
|
|
@ -652,10 +613,8 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd
|
|||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
|
||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
|
||||
|
|
@ -695,7 +654,6 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
|
|||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||
|
|
@ -721,13 +679,9 @@ github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQ
|
|||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||
github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8=
|
||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI=
|
||||
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
|
||||
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE=
|
||||
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
|
||||
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY=
|
||||
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
|
||||
github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
|
||||
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
|
||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||
|
|
@ -739,19 +693,14 @@ go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|||
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
||||
go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs=
|
||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||
go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY=
|
||||
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||
go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc=
|
||||
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
|
||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
|
||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
|
||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||
go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU=
|
||||
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
|
||||
golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
|
|
@ -788,7 +737,6 @@ golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTk
|
|||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
|
||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||
|
|
@ -910,11 +858,9 @@ golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtn
|
|||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114 h1:DnSr2mCsxyCE6ZgIkmcWUQY2R5cH/6wL7eIxEmQOMSE=
|
||||
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gomodules.xyz/jsonpatch/v2 v2.0.1 h1:xyiBuvkD2g5n7cYzx6u2sxQvsAy4QJsZFCzGVdzOXZ0=
|
||||
gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU=
|
||||
|
|
@ -930,7 +876,6 @@ google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
|
|||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
|
||||
google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
|
||||
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||
google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
|
|
@ -969,7 +914,6 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks
|
|||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
|
|
@ -985,7 +929,6 @@ gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
|||
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
|
||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||
gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
||||
|
|
@ -997,9 +940,7 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
||||
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
||||
helm.sh/helm/v3 v3.3.0 h1:7BUpW5NI1pauKDnIh0ju53pNc3Ra/UyqqBr0b5OgBwY=
|
||||
helm.sh/helm/v3 v3.3.0/go.mod h1:cWRDbGk4EiIL0/+jN0GI8T7m96Cps81/ta1kcacl85g=
|
||||
|
|
@ -1008,7 +949,6 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh
|
|||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
|
||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||
k8s.io/api v0.18.4/go.mod h1:lOIQAKYgai1+vz9J7YcDZwC26Z0zQewYOGWdyIPUUQ4=
|
||||
k8s.io/api v0.18.6/go.mod h1:eeyxr+cwCjMdLAmr2W3RyDI0VvTawSg/3RFFBEnmZGI=
|
||||
|
|
@ -1032,14 +972,12 @@ k8s.io/client-go v0.18.8 h1:SdbLpIxk5j5YbFr1b7fq8S7mDgDjYmUxSbszyoesoDM=
|
|||
k8s.io/client-go v0.18.8/go.mod h1:HqFqMllQ5NnQJNwjro9k5zMyfhZlOwpuTLVrxjkYSxU=
|
||||
k8s.io/code-generator v0.18.4/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c=
|
||||
k8s.io/code-generator v0.18.6/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c=
|
||||
k8s.io/code-generator v0.18.8 h1:lgO1P1wjikEtzNvj7ia+x1VC4svJ28a/r0wnOLhhOTU=
|
||||
k8s.io/code-generator v0.18.8/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c=
|
||||
k8s.io/component-base v0.18.4/go.mod h1:7jr/Ef5PGmKwQhyAz/pjByxJbC58mhKAhiaDu0vXfPk=
|
||||
k8s.io/component-base v0.18.6/go.mod h1:knSVsibPR5K6EW2XOjEHik6sdU5nCvKMrzMt2D4In14=
|
||||
k8s.io/component-base v0.18.8 h1:BW5CORobxb6q5mb+YvdwQlyXXS6NVH5fDXWbU7tf2L8=
|
||||
k8s.io/component-base v0.18.8/go.mod h1:00frPRDas29rx58pPCxNkhUfPbwajlyyvu8ruNgSErU=
|
||||
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||
k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmchIU0ll519K6FA4=
|
||||
k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||
k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
||||
k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
||||
|
|
@ -1059,7 +997,6 @@ k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl
|
|||
k8s.io/utils v0.0.0-20200603063816-c1c6865ac451 h1:v8ud2Up6QK1lNOKFgiIVrZdMg7MpmSnvtrOieolJKoE=
|
||||
k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/letsencrypt v0.0.3 h1:H7xDfhkaFFSYEJlKeq38RwX2jYcnTeHuDQyT+mMNMwM=
|
||||
rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0=
|
||||
sigs.k8s.io/controller-runtime v0.6.2 h1:jkAnfdTYBpFwlmBn3pS5HFO06SfxvnTZ1p5PeEF/zAA=
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ func ExecTasks(mgr *manager.Manager) error {
|
|||
{Task: install.Precheck, ErrMsg: "Failed to precheck", Skip: skipCondition1},
|
||||
{Task: install.DownloadBinaries, ErrMsg: "Failed to download kube binaries"},
|
||||
{Task: install.InitOS, ErrMsg: "Failed to init OS"},
|
||||
{Task: install.GetClusterStatus, ErrMsg: "Failed to get cluster status"},
|
||||
{Task: container_engine.InstallContainerRuntime, ErrMsg: "Failed to install container runtime", Skip: skipCondition1},
|
||||
{Task: install.PrePullImages, ErrMsg: "Failed to pre-pull images", Skip: skipCondition1},
|
||||
{Task: etcd.GetEtcdStatus, ErrMsg: "Failed to get etcd status"},
|
||||
|
|
@ -98,7 +99,6 @@ func ExecTasks(mgr *manager.Manager) error {
|
|||
{Task: etcd.SetupEtcdCluster, ErrMsg: "Failed to start etcd cluster"},
|
||||
{Task: etcd.RefreshEtcdConfig, ErrMsg: "Failed to refresh etcd configuration"},
|
||||
{Task: etcd.BackupEtcd, ErrMsg: "Failed to backup etcd data"},
|
||||
{Task: install.GetClusterStatus, ErrMsg: "Failed to get cluster status"},
|
||||
{Task: install.InstallKubeBinaries, ErrMsg: "Failed to install kube binaries"},
|
||||
{Task: install.JoinNodesToCluster, ErrMsg: "Failed to join node"},
|
||||
{Task: install.InstallInternalLoadbalancer, ErrMsg: "Failed to install internal load balancer", Skip: !mgr.Cluster.ControlPlaneEndpoint.IsInternalLBEnabled()},
|
||||
|
|
|
|||
|
|
@ -36,10 +36,6 @@ type CaCertificate struct {
|
|||
NodeName string
|
||||
}
|
||||
|
||||
type ReNewCertsStatus struct {
|
||||
kubeConfig string
|
||||
}
|
||||
|
||||
const (
|
||||
kubernetesDir = "/etc/kubernetes/"
|
||||
certDir = kubernetesDir + "pki/"
|
||||
|
|
@ -101,7 +97,7 @@ func RenewClusterCerts(clusterCfgFile string, logger *log.Logger, verbose bool)
|
|||
if err != nil {
|
||||
return errors.Wrap(err, "Failed to download cluster config")
|
||||
}
|
||||
return Execute(&executor.Executor{
|
||||
return ExecuteRenew(&executor.Executor{
|
||||
ObjName: objName,
|
||||
Cluster: &cfg.Spec,
|
||||
Logger: logger,
|
||||
|
|
@ -304,16 +300,15 @@ func ResidualTime(t time.Time) string {
|
|||
}
|
||||
|
||||
func RenewClusterCert(m *manager.Manager) error {
|
||||
var currentReNewCertsStatus *ReNewCertsStatus
|
||||
m.Logger.Infoln("Renewing cluster certs ...")
|
||||
if err := m.RunTaskOnMasterNodes(currentReNewCertsStatus.renewControlPlaneCerts, false); err != nil {
|
||||
if err := m.RunTaskOnMasterNodes(renewControlPlaneCerts, false); err != nil {
|
||||
return err
|
||||
}
|
||||
m.Logger.Infoln("Syncing cluster kubeConfig ...")
|
||||
return m.RunTaskOnWorkerNodes(currentReNewCertsStatus.syncKubeConfig, true)
|
||||
return m.RunTaskOnWorkerNodes(syncKubeConfig, true)
|
||||
}
|
||||
|
||||
func (s *ReNewCertsStatus) renewControlPlaneCerts(mgr *manager.Manager, _ *kubekeyapiv1alpha1.HostCfg) error {
|
||||
func renewControlPlaneCerts(mgr *manager.Manager, _ *kubekeyapiv1alpha1.HostCfg) error {
|
||||
_, err := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", strings.Join(kubeadmList, " && ")), 5, false)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Failed to kubeadm alpha certs renew...")
|
||||
|
|
@ -332,19 +327,19 @@ func (s *ReNewCertsStatus) renewControlPlaneCerts(mgr *manager.Manager, _ *kubek
|
|||
if err1 != nil {
|
||||
return errors.Wrap(errors.WithStack(err1), "Failed to get cluster kubeconfig")
|
||||
}
|
||||
s.kubeConfig = kubeConfigStr
|
||||
mgr.ClusterStatus.Kubeconfig = kubeConfigStr
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *ReNewCertsStatus) syncKubeConfig(mgr *manager.Manager, _ *kubekeyapiv1alpha1.HostCfg) error {
|
||||
func syncKubeConfig(mgr *manager.Manager, _ *kubekeyapiv1alpha1.HostCfg) error {
|
||||
createConfigDirCmd := "mkdir -p /root/.kube && mkdir -p $HOME/.kube"
|
||||
chownKubeConfig := "chown $(id -u):$(id -g) -R $HOME/.kube"
|
||||
if _, err := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", createConfigDirCmd), 1, false); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to create kube dir")
|
||||
}
|
||||
syncKubeconfigForRootCmd := fmt.Sprintf("sudo -E /bin/sh -c \"echo %s | base64 -d > %s\"", s.kubeConfig, "/root/.kube/config")
|
||||
syncKubeconfigForUserCmd := fmt.Sprintf("echo %s | base64 -d > %s && %s", s.kubeConfig, "$HOME/.kube/config", chownKubeConfig)
|
||||
syncKubeconfigForRootCmd := fmt.Sprintf("sudo -E /bin/sh -c \"echo %s | base64 -d > %s\"", mgr.ClusterStatus.Kubeconfig, "/root/.kube/config")
|
||||
syncKubeconfigForUserCmd := fmt.Sprintf("echo %s | base64 -d > %s && %s", mgr.ClusterStatus.Kubeconfig, "$HOME/.kube/config", chownKubeConfig)
|
||||
if _, err := mgr.Runner.ExecuteCmd(syncKubeconfigForRootCmd, 1, false); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to sync kube config")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -355,7 +355,11 @@ func resetKubeCluster(mgr *manager.Manager, _ *kubekeyapiv1alpha1.HostCfg) error
|
|||
_, _ = mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"systemctl daemon-reload && /usr/local/bin/k3s-killall.sh\"", 0, true)
|
||||
_, _ = mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"systemctl daemon-reload && /usr/local/bin/k3s-uninstall.sh\"", 0, true)
|
||||
} else {
|
||||
_, _ = mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"/usr/local/bin/kubeadm reset -f\"", 0, true)
|
||||
resetCmd := "/usr/local/bin/kubeadm reset -f"
|
||||
if mgr.ContainerRuntimeEndpoint != "" {
|
||||
resetCmd = resetCmd + " --cri-socket " + mgr.ContainerRuntimeEndpoint
|
||||
}
|
||||
_, _ = mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", resetCmd), 0, true)
|
||||
_, _ = mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", strings.Join(cmdsList, " && ")), 0, true, "printCmd")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ func ExecTasks(mgr *manager.Manager) error {
|
|||
{Task: Precheck, ErrMsg: "Failed to precheck", Skip: isK3s},
|
||||
{Task: DownloadBinaries, ErrMsg: "Failed to download kube binaries"},
|
||||
{Task: InitOS, ErrMsg: "Failed to init OS"},
|
||||
{Task: GetClusterStatus, ErrMsg: "Failed to get cluster status"},
|
||||
{Task: container_engine.InstallContainerRuntime, ErrMsg: "Failed to install container runtime", Skip: isK3s},
|
||||
{Task: PrePullImages, ErrMsg: "Failed to pre-pull images", Skip: isK3s},
|
||||
{Task: etcd.GetEtcdStatus, ErrMsg: "Failed to get etcd status"},
|
||||
|
|
@ -112,9 +113,9 @@ func ExecTasks(mgr *manager.Manager) error {
|
|||
{Task: etcd.SetupEtcdCluster, ErrMsg: "Failed to start etcd cluster"},
|
||||
{Task: etcd.RefreshEtcdConfig, ErrMsg: "Failed to refresh etcd configuration"},
|
||||
{Task: etcd.BackupEtcd, ErrMsg: "Failed to backup etcd data"},
|
||||
{Task: GetClusterStatus, ErrMsg: "Failed to get cluster status"},
|
||||
{Task: InstallKubeBinaries, ErrMsg: "Failed to install kube binaries"},
|
||||
{Task: InitKubernetesCluster, ErrMsg: "Failed to init kubernetes cluster"},
|
||||
{Task: GetClusterStatus, ErrMsg: "Failed to get cluster status"},
|
||||
{Task: JoinNodesToCluster, ErrMsg: "Failed to join node"},
|
||||
{Task: InstallInternalLoadbalancer, ErrMsg: "Failed to install internal load balancer", Skip: !mgr.Cluster.ControlPlaneEndpoint.IsInternalLBEnabled()},
|
||||
{Task: network.DeployNetworkPlugin, ErrMsg: "Failed to deploy network plugin"},
|
||||
|
|
|
|||
|
|
@ -125,44 +125,40 @@ func GetClusterStatus(mgr *manager.Manager) error {
|
|||
return err
|
||||
}
|
||||
}
|
||||
|
||||
mgr.Logger.Infoln("Get cluster status")
|
||||
|
||||
switch mgr.Cluster.Kubernetes.Type {
|
||||
case "k3s":
|
||||
mgr.Logger.Infoln("Get cluster status")
|
||||
return mgr.RunTaskOnMasterNodes(k3s.GetClusterStatus, false)
|
||||
default:
|
||||
return nil
|
||||
//return mgr.RunTaskOnMasterNodes(kubernetes.GetClusterStatus, false)
|
||||
if err := mgr.RunTaskOnMasterNodes(kubernetes.GetClusterStatus, false); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// InstallKubeBinaries is used to install kubernetes' binaries to os' PATH.
|
||||
func InstallKubeBinaries(mgr *manager.Manager) error {
|
||||
mgr.Logger.Infoln("Installing kube binaries")
|
||||
switch mgr.Cluster.Kubernetes.Type {
|
||||
case "k3s":
|
||||
mgr.Logger.Infoln("Installing kube binaries")
|
||||
return mgr.RunTaskOnK8sNodes(k3s.InstallKubeBinaries, true)
|
||||
default:
|
||||
return nil
|
||||
return mgr.RunTaskOnK8sNodes(kubernetes.InstallKubeBinaries, true)
|
||||
}
|
||||
}
|
||||
|
||||
// InitKubernetesCluster is used to init a new cluster.
|
||||
func InitKubernetesCluster(mgr *manager.Manager) error {
|
||||
var currentClusterStatus *kubernetes.ClusterStatus
|
||||
mgr.Logger.Infoln("Initializing kubernetes cluster")
|
||||
switch mgr.Cluster.Kubernetes.Type {
|
||||
case "k3s":
|
||||
mgr.Logger.Infoln("Initializing kubernetes cluster")
|
||||
return mgr.RunTaskOnMasterNodes(k3s.InitK3sCluster, true)
|
||||
default:
|
||||
mgr.Logger.Infoln("Get cluster status")
|
||||
if err := mgr.RunTaskOnMasterNodes(currentClusterStatus.GetClusterStatus, false); err != nil {
|
||||
return err
|
||||
}
|
||||
mgr.Logger.Infoln("Installing kube binaries")
|
||||
if err := mgr.RunTaskOnMasterNodes(currentClusterStatus.InstallKubeBinaries, true); err != nil {
|
||||
return err
|
||||
}
|
||||
mgr.Logger.Infoln("Initializing kubernetes cluster")
|
||||
return mgr.RunTaskOnMasterNodes(currentClusterStatus.InitKubernetesCluster, true)
|
||||
return mgr.RunTaskOnMasterNodes(kubernetes.InitKubernetesCluster, true)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -173,11 +169,10 @@ func JoinNodesToCluster(mgr *manager.Manager) error {
|
|||
return err
|
||||
}
|
||||
}
|
||||
var currentClusterStatus *kubernetes.ClusterStatus
|
||||
|
||||
mgr.Logger.Infoln("Joining nodes to cluster")
|
||||
switch mgr.Cluster.Kubernetes.Type {
|
||||
case "k3s":
|
||||
mgr.Logger.Infoln("Joining nodes to cluster")
|
||||
if err := mgr.RunTaskOnK8sNodes(k3s.JoinNodesToCluster, true); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -185,16 +180,7 @@ func JoinNodesToCluster(mgr *manager.Manager) error {
|
|||
return err
|
||||
}
|
||||
default:
|
||||
mgr.Logger.Infoln("Get cluster status")
|
||||
if err := mgr.RunTaskOnMasterNodes(currentClusterStatus.GetClusterStatus, false); err != nil {
|
||||
return err
|
||||
}
|
||||
mgr.Logger.Infoln("Installing kube binaries")
|
||||
if err := mgr.RunTaskOnMasterNodes(currentClusterStatus.InstallKubeBinaries, true); err != nil {
|
||||
return err
|
||||
}
|
||||
mgr.Logger.Infoln("Joining nodes to cluster")
|
||||
if err := mgr.RunTaskOnK8sNodes(currentClusterStatus.JoinNodesToCluster, true); err != nil {
|
||||
if err := mgr.RunTaskOnK8sNodes(kubernetes.JoinNodesToCluster, true); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := mgr.RunTaskOnK8sNodes(kubernetes.AddLabelsForNodes, true); err != nil {
|
||||
|
|
|
|||
|
|
@ -21,57 +21,43 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
type UpgradeStatus struct {
|
||||
currentVersions map[string]string
|
||||
currentVersionStr string
|
||||
nextVersionStr string
|
||||
mu sync.Mutex
|
||||
kubeConfig string
|
||||
}
|
||||
|
||||
func UpgradeKubeCluster(mgr *manager.Manager) error {
|
||||
var currentClusterUpgradeStatus *UpgradeStatus
|
||||
|
||||
func GetCurrentVersions(mgr *manager.Manager) error {
|
||||
mgr.Logger.Infoln("Get current version")
|
||||
if err := mgr.RunTaskOnK8sNodes(currentClusterUpgradeStatus.getCurrentVersion, true); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return currentClusterUpgradeStatus.UpgradeCurrentKubeCluster(mgr)
|
||||
mgr.UpgradeStatus.MU = &sync.Mutex{}
|
||||
return mgr.RunTaskOnK8sNodes(getCurrentVersion, true)
|
||||
}
|
||||
|
||||
func (s *UpgradeStatus) getCurrentVersion(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
func getCurrentVersion(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
kubeletVersionInfo, err := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"/usr/local/bin/kubelet --version\"", 3, false)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Failed to get current kubelet version")
|
||||
}
|
||||
kubeletVersionStr := strings.Split(kubeletVersionInfo, " ")[1]
|
||||
s.mu.Lock()
|
||||
s.currentVersions[kubeletVersionStr] = kubeletVersionStr
|
||||
if minVersion, err := getMinVersion(s.currentVersions); err != nil {
|
||||
mgr.UpgradeStatus.MU.Lock()
|
||||
mgr.UpgradeStatus.CurrentVersions[kubeletVersionStr] = kubeletVersionStr
|
||||
if minVersion, err := getMinVersion(mgr.UpgradeStatus.CurrentVersions); err != nil {
|
||||
return err
|
||||
} else {
|
||||
s.currentVersions = make(map[string]string)
|
||||
s.currentVersions[minVersion] = minVersion
|
||||
s.currentVersionStr = fmt.Sprintf("v%s", minVersion)
|
||||
mgr.UpgradeStatus.CurrentVersions[minVersion] = minVersion
|
||||
mgr.UpgradeStatus.CurrentVersionStr = fmt.Sprintf("v%s", minVersion)
|
||||
}
|
||||
s.mu.Unlock()
|
||||
mgr.UpgradeStatus.MU.Unlock()
|
||||
|
||||
if node.IsMaster {
|
||||
apiserverVersionStr, err := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep 'image:' | rev | cut -d ':' -f1 | rev\"", 3, false)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Failed to get current kube-apiserver version")
|
||||
}
|
||||
s.mu.Lock()
|
||||
s.currentVersions[apiserverVersionStr] = apiserverVersionStr
|
||||
if minVersion, err := getMinVersion(s.currentVersions); err != nil {
|
||||
mgr.UpgradeStatus.MU.Lock()
|
||||
mgr.UpgradeStatus.CurrentVersions[apiserverVersionStr] = apiserverVersionStr
|
||||
if minVersion, err := getMinVersion(mgr.UpgradeStatus.CurrentVersions); err != nil {
|
||||
return err
|
||||
} else {
|
||||
s.currentVersions = make(map[string]string)
|
||||
s.currentVersions[minVersion] = minVersion
|
||||
s.currentVersionStr = fmt.Sprintf("v%s", minVersion)
|
||||
mgr.UpgradeStatus.CurrentVersions = make(map[string]string)
|
||||
mgr.UpgradeStatus.CurrentVersions[minVersion] = minVersion
|
||||
mgr.UpgradeStatus.CurrentVersionStr = fmt.Sprintf("v%s", minVersion)
|
||||
}
|
||||
s.mu.Unlock()
|
||||
mgr.UpgradeStatus.MU.Unlock()
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
@ -102,7 +88,7 @@ func getMinVersion(versionsMap map[string]string) (string, error) {
|
|||
}
|
||||
}
|
||||
|
||||
func (s *UpgradeStatus) upgradeKubeMasters(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
func upgradeKubeMasters(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
kubeletVersion, err := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"/usr/local/bin/kubelet --version\"", 3, false)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Failed to get current kubelet version")
|
||||
|
|
@ -126,7 +112,7 @@ func (s *UpgradeStatus) upgradeKubeMasters(mgr *manager.Manager, node *kubekeyap
|
|||
}
|
||||
kubeadmCfgBase64 = strings.TrimSpace(string(output))
|
||||
} else {
|
||||
kubeadmCfg, err := v1beta2.GenerateKubeadmCfg(mgr, node, kubernetes.IsInitCluster, "", "")
|
||||
kubeadmCfg, err := v1beta2.GenerateKubeadmCfg(mgr, node, manager.IsInitCluster, "", "")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -185,14 +171,14 @@ func (s *UpgradeStatus) upgradeKubeMasters(mgr *manager.Manager, node *kubekeyap
|
|||
if err2 != nil {
|
||||
return errors.Wrap(errors.WithStack(err2), "Failed to get new kubeconfig")
|
||||
}
|
||||
s.kubeConfig = output
|
||||
mgr.UpgradeStatus.Kubeconfig = output
|
||||
}
|
||||
|
||||
time.Sleep(30 * time.Second)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *UpgradeStatus) upgradeKubeWorkers(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
func upgradeKubeWorkers(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
kubeletVersion, err := mgr.Runner.ExecuteCmd("/usr/local/bin/kubelet --version", 3, false)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Failed to get current kubelet version")
|
||||
|
|
@ -223,7 +209,7 @@ func (s *UpgradeStatus) upgradeKubeWorkers(mgr *manager.Manager, node *kubekeyap
|
|||
if _, err := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", createConfigDirCmd), 1, false); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to create kube dir")
|
||||
}
|
||||
syncKubeconfigCmd := fmt.Sprintf("echo %s | base64 -d > %s && echo %s | base64 -d > %s && %s", s.kubeConfig, "/root/.kube/config", s.kubeConfig, "$HOME/.kube/config", chownKubeConfig)
|
||||
syncKubeconfigCmd := fmt.Sprintf("echo %s | base64 -d > %s && echo %s | base64 -d > %s && %s", mgr.UpgradeStatus.Kubeconfig, "/root/.kube/config", mgr.UpgradeStatus.Kubeconfig, "$HOME/.kube/config", chownKubeConfig)
|
||||
if _, err := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", syncKubeconfigCmd), 1, false); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to sync kube config")
|
||||
}
|
||||
|
|
@ -231,21 +217,21 @@ func (s *UpgradeStatus) upgradeKubeWorkers(mgr *manager.Manager, node *kubekeyap
|
|||
return nil
|
||||
}
|
||||
|
||||
func (s *UpgradeStatus) UpgradeCurrentKubeCluster(mgr *manager.Manager) error {
|
||||
func UpgradeKubeCluster(mgr *manager.Manager) error {
|
||||
mgr.Logger.Infoln("Upgrading kube cluster")
|
||||
targetVersionStr := mgr.Cluster.Kubernetes.Version
|
||||
cmp, err := versionutil.MustParseSemantic(s.currentVersionStr).Compare(mgr.Cluster.Kubernetes.Version)
|
||||
cmp, err := versionutil.MustParseSemantic(mgr.UpgradeStatus.CurrentVersionStr).Compare(mgr.Cluster.Kubernetes.Version)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if cmp == 1 {
|
||||
mgr.Logger.Warningln(fmt.Sprintf("The current version (%s) is greater than the target version (%s)", s.currentVersionStr, targetVersionStr))
|
||||
mgr.Logger.Warningln(fmt.Sprintf("The current version (%s) is greater than the target version (%s)", mgr.UpgradeStatus.CurrentVersionStr, targetVersionStr))
|
||||
os.Exit(0)
|
||||
}
|
||||
Loop:
|
||||
for {
|
||||
if s.currentVersionStr != targetVersionStr {
|
||||
currentVersion := versionutil.MustParseSemantic(s.currentVersionStr)
|
||||
if mgr.UpgradeStatus.CurrentVersionStr != targetVersionStr {
|
||||
currentVersion := versionutil.MustParseSemantic(mgr.UpgradeStatus.CurrentVersionStr)
|
||||
targetVersion := versionutil.MustParseSemantic(targetVersionStr)
|
||||
var nextVersionMinor uint
|
||||
if targetVersion.Minor() == currentVersion.Minor() {
|
||||
|
|
@ -255,7 +241,7 @@ Loop:
|
|||
}
|
||||
|
||||
if nextVersionMinor == versionutil.MustParseSemantic(targetVersionStr).Minor() {
|
||||
s.nextVersionStr = targetVersionStr
|
||||
mgr.UpgradeStatus.NextVersionStr = targetVersionStr
|
||||
} else {
|
||||
nextVersionPatchList := []int{}
|
||||
for supportVersionStr := range files.FileSha256["kubeadm"]["amd64"] {
|
||||
|
|
@ -272,12 +258,12 @@ Loop:
|
|||
nextVersion := currentVersion.WithMinor(nextVersionMinor)
|
||||
nextVersion = nextVersion.WithPatch(uint(nextVersionPatchList[len(nextVersionPatchList)-1]))
|
||||
|
||||
s.nextVersionStr = fmt.Sprintf("v%s", nextVersion.String())
|
||||
mgr.UpgradeStatus.NextVersionStr = fmt.Sprintf("v%s", nextVersion.String())
|
||||
}
|
||||
|
||||
mgr.Cluster.Kubernetes.Version = s.nextVersionStr
|
||||
mgr.Cluster.Kubernetes.Version = mgr.UpgradeStatus.NextVersionStr
|
||||
|
||||
mgr.Logger.Infoln(fmt.Sprintf("Start Upgrade: %s -> %s", s.currentVersionStr, s.nextVersionStr))
|
||||
mgr.Logger.Infoln(fmt.Sprintf("Start Upgrade: %s -> %s", mgr.UpgradeStatus.CurrentVersionStr, mgr.UpgradeStatus.NextVersionStr))
|
||||
|
||||
if err := preinstall.Prepare(mgr); err != nil {
|
||||
return err
|
||||
|
|
@ -287,14 +273,14 @@ Loop:
|
|||
return err
|
||||
}
|
||||
|
||||
if err := mgr.RunTaskOnK8sNodes(s.upgradeNodes, false); err != nil {
|
||||
if err := mgr.RunTaskOnK8sNodes(upgradeNodes, false); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := mgr.RunTaskOnMasterNodes(reconfigDns, false); err != nil {
|
||||
return err
|
||||
}
|
||||
s.currentVersionStr = s.nextVersionStr
|
||||
mgr.UpgradeStatus.CurrentVersionStr = mgr.UpgradeStatus.NextVersionStr
|
||||
} else {
|
||||
break Loop
|
||||
}
|
||||
|
|
@ -304,14 +290,14 @@ Loop:
|
|||
|
||||
}
|
||||
|
||||
func (s *UpgradeStatus) upgradeNodes(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
func upgradeNodes(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
|
||||
if node.IsMaster {
|
||||
if err := s.upgradeKubeMasters(mgr, node); err != nil {
|
||||
if err := upgradeKubeMasters(mgr, node); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
if err := s.upgradeKubeWorkers(mgr, node); err != nil {
|
||||
if err := upgradeKubeWorkers(mgr, node); err != nil {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,6 +83,8 @@ var versionCheck = map[string]map[string]map[string]bool{
|
|||
},
|
||||
"other": {
|
||||
"k8s": {
|
||||
"v1.22": true,
|
||||
"v1.21": true,
|
||||
"v1.20": true,
|
||||
"v1.19": true,
|
||||
"v1.18": true,
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ func UpgradeCluster(clusterCfgFile, k8sVersion, ksVersion string, logger *log.Lo
|
|||
func ExecTasks(mgr *manager.Manager) error {
|
||||
upgradeTasks := []manager.Task{
|
||||
{Task: GetClusterInfo, ErrMsg: "Failed to get cluster info"},
|
||||
{Task: GetCurrentVersions, ErrMsg: "Failed to get current version"},
|
||||
{Task: install.InitOS, ErrMsg: "Failed to download kube binaries"},
|
||||
{Task: UpgradeKubeCluster, ErrMsg: "Failed to upgrade kube cluster"},
|
||||
{Task: install.InstallInternalLoadbalancer, ErrMsg: "Failed to install internal load balancer", Skip: !mgr.Cluster.ControlPlaneEndpoint.IsInternalLBEnabled()},
|
||||
|
|
|
|||
|
|
@ -61,7 +61,6 @@ spec:
|
|||
port: 6443
|
||||
kubernetes:
|
||||
version: {{ .Options.KubeVersion }}
|
||||
imageRepo: kubesphere
|
||||
clusterName: cluster.local
|
||||
network:
|
||||
plugin: calico
|
||||
|
|
|
|||
|
|
@ -13,11 +13,11 @@ func InstallContainerRuntime(mgr *manager.Manager) error {
|
|||
mgr.Logger.Infoln("Installing Container Runtime ...")
|
||||
switch strings.TrimSpace(mgr.Cluster.Kubernetes.ContainerManager) {
|
||||
case "docker", "":
|
||||
if err := mgr.RunTaskOnAllNodes(installDockerOnNode, true); err != nil {
|
||||
if err := mgr.RunTaskOnK8sNodes(installDockerOnNode, true); err != nil {
|
||||
return err
|
||||
}
|
||||
case "containerd":
|
||||
if err := mgr.RunTaskOnAllNodes(installContainerdOnNode, true); err != nil {
|
||||
if err := mgr.RunTaskOnK8sNodes(installContainerdOnNode, true); err != nil {
|
||||
return err
|
||||
}
|
||||
case "crio":
|
||||
|
|
|
|||
|
|
@ -84,11 +84,6 @@ state = "/run/containerd"
|
|||
[plugins]
|
||||
[plugins."io.containerd.grpc.v1.cri"]
|
||||
sandbox_image = "{{ .SandBoxImage }}"
|
||||
[plugins."io.containerd.grpc.v1.cri".containerd]
|
||||
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
|
||||
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
|
||||
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
|
||||
SystemdCgroup = true
|
||||
[plugins."io.containerd.grpc.v1.cri".cni]
|
||||
bin_dir = "/opt/cni/bin"
|
||||
conf_dir = "/etc/cni/net.d"
|
||||
|
|
@ -148,28 +143,30 @@ func generateCrictlConfig() (string, error) {
|
|||
}
|
||||
|
||||
func installContainerdOnNode(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
checkCrictl, _ := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"if [ -z $(which crictl) ]; then echo 'Crictl will be installed'; fi\"", 0, false)
|
||||
if strings.Contains(strings.TrimSpace(checkCrictl), "Crictl will be installed") {
|
||||
err := syncCrictlBinarie(mgr, node)
|
||||
if err != nil {
|
||||
return err
|
||||
if !manager.ExistNode(mgr, node) {
|
||||
checkCrictl, _ := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"if [ -z $(which crictl) ]; then echo 'Crictl will be installed'; fi\"", 0, false)
|
||||
if strings.Contains(strings.TrimSpace(checkCrictl), "Crictl will be installed") {
|
||||
err := syncCrictlBinarie(mgr, node)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
checkContainerd, _ := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"if [ -z $(which containerd) ] || [ ! -e /run/containerd/containerd.sock ]; then echo 'Container Runtime will be installed'; fi\"", 0, false)
|
||||
if strings.Contains(strings.TrimSpace(checkContainerd), "Container Runtime will be installed") {
|
||||
// Installation and configuration of Containerd multiplex Docker.
|
||||
err := syncDockerBinaries(mgr, node)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = setContainerd(mgr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = setDocker(mgr)
|
||||
if err != nil {
|
||||
return err
|
||||
checkContainerd, _ := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"if [ -z $(which containerd) ] || [ ! -e /run/containerd/containerd.sock ]; then echo 'Container Runtime will be installed'; fi\"", 0, false)
|
||||
if strings.Contains(strings.TrimSpace(checkContainerd), "Container Runtime will be installed") {
|
||||
// Installation and configuration of Containerd multiplex Docker.
|
||||
err := syncDockerBinaries(mgr, node)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = setContainerd(mgr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = setDocker(mgr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -126,19 +126,21 @@ func generateDockerService() (string, error) {
|
|||
}
|
||||
|
||||
func installDockerOnNode(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
output, _ := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"if [ -z $(which docker) ] || [ ! -e /var/run/docker.sock ]; then echo 'Container Runtime will be installed'; fi\"", 0, false)
|
||||
if strings.Contains(strings.TrimSpace(output), "Container Runtime will be installed") {
|
||||
err := syncDockerBinaries(mgr, node)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = setContainerd(mgr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = setDocker(mgr)
|
||||
if err != nil {
|
||||
return err
|
||||
if !manager.ExistNode(mgr, node) {
|
||||
output, _ := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"if [ -z $(which docker) ] || [ ! -e /var/run/docker.sock ]; then echo 'Container Runtime will be installed'; fi\"", 0, false)
|
||||
if strings.Contains(strings.TrimSpace(output), "Container Runtime will be installed") {
|
||||
err := syncDockerBinaries(mgr, node)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = setContainerd(mgr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = setDocker(mgr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ var (
|
|||
"v1.19.9": "917712bbd38b625aca456ffa78bf134d64f0efb186cc5772c9844ba6d74fd920",
|
||||
"v1.20.4": "dcc5629da2c31a000b9b50db077b1cd51a6840e08233fd64b67e37f3f098c392",
|
||||
"v1.20.6": "ff6fca46edeccd8a4dbf162079d0b3d27841b04885b3f47f80377b3a93ab1533",
|
||||
"v1.20.10": "da5864968a38e0bf2317965e87b5425e1b9101a49dd5178f2e967c0a46547270",
|
||||
"v1.21.4": "286794aed41148e82a77087d79111052ea894796c6ae81fc463275dcd848f98d",
|
||||
"v1.22.1": "50a5f0d186d7aefae309539e9cc7d530ef1a9b45ce690801655c2bee722d978c",
|
||||
},
|
||||
|
|
@ -84,6 +85,7 @@ var (
|
|||
"v1.19.9": "403c767bef0d681aebc45d5643787fc8c0b9344866cbd339368637a05ea1d11c",
|
||||
"v1.20.4": "c3ff7f944826889a23a002c85e8f9f9d9a8bc95e9083fbdda59831e3e34245a7",
|
||||
"v1.20.6": "33837e290bd76fcb16af27db0e814ec023c25e6c41f25a0907b48756d4a2ffc2",
|
||||
"v1.20.10": "ec1f8df0f57b8aa6bddce2d6bb8d0503e016b022ba8a5f113ddf412d9a99c03c",
|
||||
"v1.21.4": "30645f57296281d214a9dd787a90bd16207df4b1fca7ac320913c616818a92cd",
|
||||
"v1.22.1": "85df7978b2e5bb78064ed0bcce14a39d105a1a3968bb92ee5d2f96a1fa09ed12",
|
||||
},
|
||||
|
|
@ -111,6 +113,7 @@ var (
|
|||
"v1.19.9": "296e72c395f030209e712167fc5f6d2fdfe3530ca4c01bcd9bfb8c5e727c3d8d",
|
||||
"v1.20.4": "a9f28ac492b3cbf75dee284576b2e1681e67170cd36f3f5cdc31495f1bdbf809",
|
||||
"v1.20.6": "7688a663dd06222d337c8fdb5b05e1d9377e6d64aa048c6acf484bc3f2a596a8",
|
||||
"v1.20.10": "de1b24f33d47cc4dc14a10f051d7d6fbbcf3800d3a07ddb45fc83660183c3a73",
|
||||
"v1.21.4": "cdd46617d1a501531c62421de3754d65f30ad24d75beae2693688993a12bb557",
|
||||
"v1.22.1": "2079780ad2ff993affc9b8e1a378bf5ee759bf87fdc446e6a892a0bbd7353683",
|
||||
},
|
||||
|
|
@ -131,6 +134,7 @@ var (
|
|||
"v1.19.9": "796f080c53ec50b11152558b4a744432349b800e37b80516bcdc459152766a4f",
|
||||
"v1.20.4": "66bcdc7521e226e4acaa93c08e5ea7b2f57829e1a5b9decfd2b91d237e216e1d",
|
||||
"v1.20.6": "6e7b44d1ca65f970b0646f7d093dcf0cfefc44d4a67f29d542fe1b7ca6dcf715",
|
||||
"v1.20.10": "5107a4b2eb017039dda900cf263ec19484eee8bec070fc88803d3d9d4cc9fb18",
|
||||
"v1.21.4": "12c849ccc627e9404187adf432a922b895c8bdecfd7ca901e1928396558eb043",
|
||||
"v1.22.1": "d5ffd67d8285fb224a1c49622fd739131f7b941e3d68f233dec96e72c9ebee63",
|
||||
},
|
||||
|
|
@ -158,6 +162,7 @@ var (
|
|||
"v1.19.9": "7128c9e38ab9c445a3b02d3d0b3f0f15fe7fbca56fd87b84e575d7b29e999ad9",
|
||||
"v1.20.4": "98e8aea149b00f653beeb53d4bd27edda9e73b48fed156c4a0aa1dabe4b1794c",
|
||||
"v1.20.6": "89ae000df6bbdf38ae4307cc4ecc0347d5c871476862912c0a765db9bf05284e",
|
||||
"v1.20.10": "1e87edb99b7a92a142b458976ae75412d3ee22421793968b03213ddd007c0530",
|
||||
"v1.21.4": "9410572396fb31e49d088f9816beaebad7420c7686697578691be1651d3bf85a",
|
||||
"v1.22.1": "78178a8337fc6c76780f60541fca7199f0f1a2e9c41806bded280a4a5ef665c9",
|
||||
},
|
||||
|
|
@ -178,6 +183,7 @@ var (
|
|||
"v1.19.9": "628627d01c9eaf624ffe3cf1195947a256ea5f842851e42682057e4233a9e283",
|
||||
"v1.20.4": "0fd64b3e5d3fda4637c174a5aea0119b46d6cbede591a4dc9130a81481fc952f",
|
||||
"v1.20.6": "1d0a29420c4488b15adb44044b193588989b95515cd6c8c03907dafe9b3d53f3",
|
||||
"v1.20.10": "e559bcf16c824a2337125f20a2d64bfbf3959c713aa4f711871a694e2f58d4d8",
|
||||
"v1.21.4": "8ac78de847118c94e2d87844e9b974556dfb30aff0e0d15fd03b82681df3ac98",
|
||||
"v1.22.1": "5c7ef1e505c35a8dc0b708f6b6ecdad6723875bb85554e9f9c3fe591e030ae5c",
|
||||
},
|
||||
|
|
|
|||
|
|
@ -37,8 +37,7 @@ var (
|
|||
funcMap = template.FuncMap{"toYaml": toYAML, "indent": Indent}
|
||||
// KubeadmCfgTempl defines the template of kubeadm configuration file.
|
||||
KubeadmCfgTempl = template.Must(template.New("kubeadmCfg").Funcs(funcMap).Parse(
|
||||
dedent.Dedent(`
|
||||
{{- if .IsInitCluster }}
|
||||
dedent.Dedent(`{{- if .IsInitCluster -}}
|
||||
---
|
||||
apiVersion: kubeadm.k8s.io/v1beta2
|
||||
kind: ClusterConfiguration
|
||||
|
|
@ -90,10 +89,12 @@ kind: InitConfiguration
|
|||
localAPIEndpoint:
|
||||
advertiseAddress: {{ .ControlPlanAddr }}
|
||||
bindPort: {{ .ControlPlanPort }}
|
||||
{{- if .CriSock }}
|
||||
nodeRegistration:
|
||||
{{- if .CriSock }}
|
||||
criSocket: {{ .CriSock }}
|
||||
{{- end }}
|
||||
kubeletExtraArgs:
|
||||
cgroup-driver: {{ .CgroupDriver }}
|
||||
---
|
||||
apiVersion: kubeproxy.config.k8s.io/v1alpha1
|
||||
kind: KubeProxyConfiguration
|
||||
|
|
@ -103,7 +104,7 @@ apiVersion: kubelet.config.k8s.io/v1beta1
|
|||
kind: KubeletConfiguration
|
||||
{{ toYaml .KubeletConfiguration }}
|
||||
|
||||
{{ else }}
|
||||
{{- else -}}
|
||||
---
|
||||
apiVersion: kubeadm.k8s.io/v1beta2
|
||||
kind: JoinConfiguration
|
||||
|
|
@ -125,7 +126,7 @@ nodeRegistration:
|
|||
criSocket: {{ .CriSock }}
|
||||
{{- end }}
|
||||
kubeletExtraArgs:
|
||||
cgroupDriver: {{ .CgroupDriver }}
|
||||
cgroup-driver: {{ .CgroupDriver }}
|
||||
|
||||
{{- end }}
|
||||
`)))
|
||||
|
|
@ -155,7 +156,7 @@ func GenerateKubeadmCfg(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg,
|
|||
// generate etcd configuration
|
||||
var externalEtcd kubekeyapiv1alpha1.ExternalEtcd
|
||||
var endpointsList []string
|
||||
var caFile, certFile, keyFile, containerRuntimeEndpoint string
|
||||
var caFile, certFile, keyFile string
|
||||
|
||||
for _, host := range mgr.EtcdNodes {
|
||||
endpoint := fmt.Sprintf("https://%s:%s", host.InternalAddress, kubekeyapiv1alpha1.DefaultEtcdPort)
|
||||
|
|
@ -175,22 +176,9 @@ func GenerateKubeadmCfg(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg,
|
|||
_, ControllerManagerArgs := util.GetArgs(controllermanagerArgs, mgr.Cluster.Kubernetes.ControllerManagerArgs)
|
||||
_, SchedulerArgs := util.GetArgs(schedulerArgs, mgr.Cluster.Kubernetes.SchedulerArgs)
|
||||
|
||||
// generate cri configuration
|
||||
switch mgr.Cluster.Kubernetes.ContainerManager {
|
||||
case "docker":
|
||||
containerRuntimeEndpoint = ""
|
||||
case "crio":
|
||||
containerRuntimeEndpoint = kubekeyapiv1alpha1.DefaultCrioEndpoint
|
||||
case "containerd":
|
||||
containerRuntimeEndpoint = kubekeyapiv1alpha1.DefaultContainerdEndpoint
|
||||
case "isula":
|
||||
containerRuntimeEndpoint = kubekeyapiv1alpha1.DefaultIsulaEndpoint
|
||||
default:
|
||||
containerRuntimeEndpoint = ""
|
||||
}
|
||||
|
||||
if mgr.Cluster.Kubernetes.ContainerRuntimeEndpoint != "" {
|
||||
containerRuntimeEndpoint = mgr.Cluster.Kubernetes.ContainerRuntimeEndpoint
|
||||
checkCgroupDriver, err := getKubeletCgroupDriver(mgr)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return util.Render(KubeadmCfgTempl, util.Data{
|
||||
|
|
@ -208,16 +196,16 @@ func GenerateKubeadmCfg(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg,
|
|||
"CertSANs": mgr.Cluster.GenerateCertSANs(),
|
||||
"ExternalEtcd": externalEtcd,
|
||||
"NodeCidrMaskSize": mgr.Cluster.Kubernetes.NodeCidrMaskSize,
|
||||
"CriSock": containerRuntimeEndpoint,
|
||||
"CriSock": mgr.ContainerRuntimeEndpoint,
|
||||
"InternalLBDisabled": !mgr.Cluster.ControlPlaneEndpoint.IsInternalLBEnabled(),
|
||||
"AdvertiseAddress": node.InternalAddress,
|
||||
"ApiServerArgs": ApiServerArgs,
|
||||
"ControllerManagerArgs": ControllerManagerArgs,
|
||||
"SchedulerArgs": SchedulerArgs,
|
||||
"KubeletConfiguration": GetKubeletConfiguration(mgr, containerRuntimeEndpoint),
|
||||
"KubeletConfiguration": GetKubeletConfiguration(mgr, mgr.ContainerRuntimeEndpoint),
|
||||
"KubeProxyConfiguration": getKubeProxyConfiguration(mgr),
|
||||
"IsControlPlane": node.IsMaster,
|
||||
"CgroupDriver": GetKubeletConfiguration(mgr, containerRuntimeEndpoint)["cgroupDriver"],
|
||||
"CgroupDriver": checkCgroupDriver,
|
||||
"BootstrapToken": bootstrapToken,
|
||||
"CertificateKey": certificateKey,
|
||||
})
|
||||
|
|
@ -226,13 +214,13 @@ func GenerateKubeadmCfg(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg,
|
|||
func getKubeletCgroupDriver(mgr *manager.Manager) (string, error) {
|
||||
var cmd, kubeletCgroupDriver string
|
||||
switch mgr.Cluster.Kubernetes.ContainerManager {
|
||||
case "docker":
|
||||
case manager.Docker, "":
|
||||
cmd = "docker info | grep 'Cgroup Driver' | awk -F': ' '{ print $2; }'"
|
||||
case "crio":
|
||||
case manager.Crio:
|
||||
cmd = "crio config | grep cgroup_manager | awk -F'= ' '{ print $2; }'"
|
||||
case "containerd":
|
||||
case manager.Conatinerd:
|
||||
cmd = "containerd config dump | grep systemd_cgroup | awk -F'= ' '{ print $2; }'"
|
||||
case "isula":
|
||||
case manager.Isula:
|
||||
cmd = "isula info | grep 'Cgroup Driver' | awk -F': ' '{ print $2; }'"
|
||||
default:
|
||||
kubeletCgroupDriver = ""
|
||||
|
|
@ -245,9 +233,8 @@ func getKubeletCgroupDriver(mgr *manager.Manager) (string, error) {
|
|||
if strings.Contains(checkResult, "systemd") && !strings.Contains(checkResult, "false") {
|
||||
kubeletCgroupDriver = "systemd"
|
||||
} else {
|
||||
kubeletCgroupDriver = ""
|
||||
kubeletCgroupDriver = "cgroupfs"
|
||||
}
|
||||
|
||||
return kubeletCgroupDriver, nil
|
||||
}
|
||||
|
||||
|
|
@ -282,16 +269,6 @@ func GetKubeletConfiguration(mgr *manager.Manager, criSock string) map[string]in
|
|||
},
|
||||
}
|
||||
|
||||
cgroupDriver, err := getKubeletCgroupDriver(mgr)
|
||||
if err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
if len(cgroupDriver) != 0 {
|
||||
defaultKubeletConfiguration["cgroupDriver"] = "systemd"
|
||||
} else {
|
||||
defaultKubeletConfiguration["cgroupDriver"] = "cgroup"
|
||||
}
|
||||
|
||||
if len(criSock) != 0 {
|
||||
defaultKubeletConfiguration["containerLogMaxSize"] = "5Mi"
|
||||
defaultKubeletConfiguration["containerLogMaxFiles"] = 3
|
||||
|
|
|
|||
|
|
@ -19,14 +19,13 @@ package kubernetes
|
|||
import (
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"github.com/kubesphere/kubekey/pkg/kubernetes/config/v1beta2"
|
||||
"io/ioutil"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/kubesphere/kubekey/pkg/kubernetes/config/v1beta2"
|
||||
|
||||
kubekeyapiv1alpha1 "github.com/kubesphere/kubekey/apis/kubekey/v1alpha1"
|
||||
"github.com/kubesphere/kubekey/pkg/plugins/dns"
|
||||
"github.com/kubesphere/kubekey/pkg/util"
|
||||
|
|
@ -34,54 +33,42 @@ import (
|
|||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
const (
|
||||
IsInitCluster = true
|
||||
Docker = "docker"
|
||||
Conatinerd = "containerd"
|
||||
Crio = "crio"
|
||||
Isula = "isula"
|
||||
)
|
||||
|
||||
// ClusterStatus is used to store cluster status
|
||||
type ClusterStatus struct {
|
||||
isExist bool
|
||||
version string
|
||||
allNodesInfo map[string]string
|
||||
kubeconfig string
|
||||
bootstrapToken string
|
||||
certificateKey string
|
||||
}
|
||||
|
||||
// GetClusterStatus is used to fetch status and info from cluster.
|
||||
func (s *ClusterStatus) GetClusterStatus(mgr *manager.Manager, _ *kubekeyapiv1alpha1.HostCfg) error {
|
||||
output, err := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"[ -f /etc/kubernetes/admin.conf ] && echo 'Cluster already exists.' || echo 'Cluster will be created.'\"", 0, true)
|
||||
func GetClusterStatus(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
output, err := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"[ -f /etc/kubernetes/admin.conf ] && echo 'Cluster already exists.' || echo 'Cluster will be created.'\"", 0, false)
|
||||
if strings.Contains(output, "Cluster will be created") {
|
||||
s.isExist = false
|
||||
return nil
|
||||
} else {
|
||||
if err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to find /etc/kubernetes/admin.conf")
|
||||
}
|
||||
|
||||
s.isExist = true
|
||||
if output, err := mgr.Runner.ExecuteCmd("sudo cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep 'image:' | awk -F '[:]' '{print $(NF-0)}'", 0, true); err != nil {
|
||||
mgr.ClusterStatus.IsExist = true
|
||||
|
||||
if output, err := mgr.Runner.ExecuteCmd("sudo cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep 'image:' | awk -F '[:]' '{print $(NF-0)}'", 0, false); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to find current version")
|
||||
} else {
|
||||
if !strings.Contains(output, "No such file or directory") {
|
||||
s.version = output
|
||||
mgr.ClusterStatus.Version = output
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.loadKubeConfig(mgr); err != nil {
|
||||
if err := loadKubeConfig(mgr); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := s.getClusterInfo(mgr); err != nil {
|
||||
if err := getClusterInfo(mgr); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := s.getJoinInfo(mgr); err != nil {
|
||||
return err
|
||||
checkKubeadmConfig, err := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"cat /etc/kubernetes/kubeadm-config.yaml\"", 0, false)
|
||||
if err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to find /etc/kubernetes/kubeadm-config.yaml")
|
||||
}
|
||||
if (mgr.ClusterStatus.BootstrapToken == "" || mgr.ClusterStatus.CertificateKey == "") && (strings.Contains(checkKubeadmConfig, "InitConfiguration") || strings.Contains(checkKubeadmConfig, "ClusterConfiguration")) {
|
||||
if err := getJoinInfo(mgr); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -89,19 +76,24 @@ func (s *ClusterStatus) GetClusterStatus(mgr *manager.Manager, _ *kubekeyapiv1al
|
|||
}
|
||||
|
||||
// InitKubernetesCluster is used to init a new cluster.
|
||||
func (s *ClusterStatus) InitKubernetesCluster(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
if mgr.Runner.Index == 0 && !s.isExist {
|
||||
if err := generateKubeadmConfig(mgr, node, IsInitCluster, "", ""); err != nil {
|
||||
func InitKubernetesCluster(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
if mgr.Runner.Index == 0 && !mgr.ClusterStatus.IsExist {
|
||||
if err := generateKubeadmConfig(mgr, node, manager.IsInitCluster, "", ""); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
resetCmd := "/usr/local/bin/kubeadm reset -f"
|
||||
if mgr.ContainerRuntimeEndpoint != "" {
|
||||
resetCmd = resetCmd + " --cri-socket " + mgr.ContainerRuntimeEndpoint
|
||||
}
|
||||
|
||||
for i := 0; i < 3; i++ {
|
||||
_, err2 := mgr.Runner.ExecuteCmd("sudo env PATH=$PATH /bin/sh -c \"/usr/local/bin/kubeadm init --config=/etc/kubernetes/kubeadm-config.yaml --ignore-preflight-errors=FileExisting-crictl\"", 0, true)
|
||||
_, err2 := mgr.Runner.ExecuteCmd("sudo env PATH=$PATH:/sbin:/usr/sbin /bin/sh -c \"/usr/local/bin/kubeadm init --config=/etc/kubernetes/kubeadm-config.yaml --ignore-preflight-errors=FileExisting-crictl\"", 0, true)
|
||||
if err2 != nil {
|
||||
if i == 2 {
|
||||
return errors.Wrap(errors.WithStack(err2), "Failed to init kubernetes cluster")
|
||||
}
|
||||
_, _ = mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"/usr/local/bin/kubeadm reset -f\"", 0, true)
|
||||
_, _ = mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo env PATH=$PATH:/sbin:/usr/sbin /bin/sh -c \"%s\"", resetCmd), 0, true)
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
|
@ -124,19 +116,24 @@ func (s *ClusterStatus) InitKubernetesCluster(mgr *manager.Manager, node *kubeke
|
|||
}
|
||||
|
||||
// JoinNodesToCluster is used to join node to Cluster.
|
||||
func (s *ClusterStatus) JoinNodesToCluster(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
if !s.existNode(node) {
|
||||
if err := generateKubeadmConfig(mgr, node, !IsInitCluster, s.bootstrapToken, s.certificateKey); err != nil {
|
||||
func JoinNodesToCluster(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
if !manager.ExistNode(mgr, node) {
|
||||
if err := generateKubeadmConfig(mgr, node, !manager.IsInitCluster, mgr.ClusterStatus.BootstrapToken, mgr.ClusterStatus.CertificateKey); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
resetCmd := "/usr/local/bin/kubeadm reset -f"
|
||||
if mgr.ContainerRuntimeEndpoint != "" {
|
||||
resetCmd = resetCmd + " --cri-socket " + mgr.ContainerRuntimeEndpoint
|
||||
}
|
||||
|
||||
for i := 0; i < 3; i++ {
|
||||
_, err := mgr.Runner.ExecuteCmd("sudo env PATH=$PATH /bin/sh -c \"/usr/local/bin/kubeadm join --config=/etc/kubernetes/kubeadm-config.yaml\"", 0, true)
|
||||
_, err := mgr.Runner.ExecuteCmd("sudo env PATH=$PATH:/sbin:/usr/sbin /bin/sh -c \"/usr/local/bin/kubeadm join --config=/etc/kubernetes/kubeadm-config.yaml\"", 0, true)
|
||||
if err != nil {
|
||||
if i == 2 {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to add master to cluster")
|
||||
}
|
||||
_, _ = mgr.Runner.ExecuteCmd("sudo env PATH=$PATH /bin/sh -c \"/usr/local/bin/kubeadm reset -f\"", 0, true)
|
||||
_, _ = mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo env PATH=$PATH:/sbin:/usr/sbin /bin/sh -c \"%s\"", resetCmd), 0, true)
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
|
@ -150,14 +147,10 @@ func (s *ClusterStatus) JoinNodesToCluster(mgr *manager.Manager, node *kubekeyap
|
|||
if err1 != nil {
|
||||
return err1
|
||||
}
|
||||
err2 := addWorkerLabel(mgr, node)
|
||||
if err2 != nil {
|
||||
return err2
|
||||
}
|
||||
}
|
||||
|
||||
if node.IsWorker && !node.IsMaster {
|
||||
if err := s.getKubeConfigForWorker(mgr); err != nil {
|
||||
if err := getKubeConfigForWorker(mgr); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
@ -171,7 +164,7 @@ func (s *ClusterStatus) JoinNodesToCluster(mgr *manager.Manager, node *kubekeyap
|
|||
}
|
||||
|
||||
// loadKubeConfig is used to download the kubeconfig to local and store it in the states.
|
||||
func (s *ClusterStatus) loadKubeConfig(mgr *manager.Manager) error {
|
||||
func loadKubeConfig(mgr *manager.Manager) error {
|
||||
kubeCfgBase64Cmd := "cat /etc/kubernetes/admin.conf | base64 --wrap=0"
|
||||
kubeConfigStr, err1 := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", kubeCfgBase64Cmd), 1, false)
|
||||
if err1 != nil {
|
||||
|
|
@ -191,14 +184,14 @@ func (s *ClusterStatus) loadKubeConfig(mgr *manager.Manager) error {
|
|||
if err := ioutil.WriteFile(kubeConfigPath, []byte(newKubeconfigStr), 0644); err != nil {
|
||||
return err
|
||||
}
|
||||
s.kubeconfig = newKubeconfigStr
|
||||
mgr.ClusterStatus.Kubeconfig = newKubeconfigStr
|
||||
return nil
|
||||
}
|
||||
|
||||
// getClusterInfo is used to fetch cluster's nodes info.
|
||||
func (s *ClusterStatus) getClusterInfo(mgr *manager.Manager) error {
|
||||
var allNodesInfo map[string]string
|
||||
clusterInfo, err := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"/usr/local/bin/kubectl --no-headers=true get nodes -o custom-columns=:metadata.name,:status.nodeInfo.kubeletVersion,:status.addresses\"", 5, true)
|
||||
func getClusterInfo(mgr *manager.Manager) error {
|
||||
allNodesInfo := map[string]string{}
|
||||
clusterInfo, err := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"/usr/local/bin/kubectl --no-headers=true get nodes -o custom-columns=:metadata.name,:status.nodeInfo.kubeletVersion,:status.addresses\"", 5, false)
|
||||
if err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to get cluster info")
|
||||
}
|
||||
|
|
@ -226,44 +219,46 @@ func (s *ClusterStatus) getClusterInfo(mgr *manager.Manager) error {
|
|||
}
|
||||
}
|
||||
}
|
||||
s.allNodesInfo = allNodesInfo
|
||||
|
||||
mgr.ClusterStatus.AllNodesInfo = allNodesInfo
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// getJoinInfo is used to fetch parameters (bootstrapToken and certificateKey) information when adding nodes.
|
||||
func (s *ClusterStatus) getJoinInfo(mgr *manager.Manager) error {
|
||||
func getJoinInfo(mgr *manager.Manager) error {
|
||||
uploadCertsCmd := "/usr/local/bin/kubeadm init phase upload-certs --config=/etc/kubernetes/kubeadm-config.yaml --upload-certs"
|
||||
output, err := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", uploadCertsCmd), 5, true)
|
||||
output, err := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", uploadCertsCmd), 5, false)
|
||||
if err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to upload kubeadm certs")
|
||||
}
|
||||
reg := regexp.MustCompile("[0-9|a-z]{64}")
|
||||
s.certificateKey = reg.FindAllString(output, -1)[0]
|
||||
mgr.ClusterStatus.CertificateKey = reg.FindAllString(output, -1)[0]
|
||||
err1 := patchKubeadmSecret(mgr)
|
||||
if err1 != nil {
|
||||
return err1
|
||||
}
|
||||
|
||||
tokenCreateMasterCmd := "/usr/local/bin/kubeadm token create"
|
||||
output, err2 := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", tokenCreateMasterCmd), 5, true)
|
||||
output, err2 := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", tokenCreateMasterCmd), 5, false)
|
||||
if err2 != nil {
|
||||
return errors.Wrap(errors.WithStack(err2), "Failed to create kubeadm token")
|
||||
}
|
||||
reg = regexp.MustCompile("[0-9|a-z]{6}.[0-9|a-z]{16}")
|
||||
s.bootstrapToken = reg.FindAllString(output, -1)[0]
|
||||
mgr.ClusterStatus.BootstrapToken = reg.FindAllString(output, -1)[0]
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// getKubeConfigForWorker is used to sync kubeconfig to workers' ~/.kube/config .
|
||||
func (s *ClusterStatus) getKubeConfigForWorker(mgr *manager.Manager) error {
|
||||
func getKubeConfigForWorker(mgr *manager.Manager) error {
|
||||
createConfigDirCmd := "mkdir -p /root/.kube && mkdir -p $HOME/.kube"
|
||||
chownKubeConfig := "chown $(id -u):$(id -g) -R $HOME/.kube"
|
||||
if _, err := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", createConfigDirCmd), 1, false); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to create kube dir")
|
||||
}
|
||||
syncKubeconfigForRootCmd := fmt.Sprintf("sudo -E /bin/sh -c \"echo %s | base64 -d > %s\"", s.kubeconfig, "/root/.kube/config")
|
||||
syncKubeconfigForUserCmd := fmt.Sprintf("echo %s | base64 -d > %s && %s", s.kubeconfig, "$HOME/.kube/config", chownKubeConfig)
|
||||
syncKubeconfigForRootCmd := fmt.Sprintf("sudo -E /bin/sh -c \"echo %s | base64 -d > %s\"", base64.StdEncoding.EncodeToString([]byte(mgr.ClusterStatus.Kubeconfig)), "/root/.kube/config")
|
||||
syncKubeconfigForUserCmd := fmt.Sprintf("echo %s | base64 -d > %s && %s", base64.StdEncoding.EncodeToString([]byte(mgr.ClusterStatus.Kubeconfig)), "$HOME/.kube/config", chownKubeConfig)
|
||||
if _, err := mgr.Runner.ExecuteCmd(syncKubeconfigForRootCmd, 1, false); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to sync kube config")
|
||||
}
|
||||
|
|
@ -313,7 +308,7 @@ func addWorkerLabel(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) erro
|
|||
func patchKubeadmSecret(mgr *manager.Manager) error {
|
||||
externalEtcdCerts := []string{"external-etcd-ca.crt", "external-etcd.crt", "external-etcd.key"}
|
||||
for _, cert := range externalEtcdCerts {
|
||||
_, err := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"/usr/local/bin/kubectl patch -n kube-system secret kubeadm-certs -p '{\\\"data\\\": {\\\"%s\\\": \\\"\\\"}}'\"", cert), 5, true)
|
||||
_, err := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo -E /bin/sh -c \"/usr/local/bin/kubectl patch -n kube-system secret kubeadm-certs -p '{\\\"data\\\": {\\\"%s\\\": \\\"\\\"}}'\"", cert), 5, false)
|
||||
if err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "Failed to patch kubeadm secret")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,8 +31,8 @@ import (
|
|||
)
|
||||
|
||||
// InstallKubeBinaries is used to install kubernetes' binaries to os' PATH.
|
||||
func (s *ClusterStatus) InstallKubeBinaries(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
if !s.existNode(node) {
|
||||
func InstallKubeBinaries(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
if !manager.ExistNode(mgr, node) {
|
||||
if err := SyncKubeBinaries(mgr, node); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -44,17 +44,6 @@ func (s *ClusterStatus) InstallKubeBinaries(mgr *manager.Manager, node *kubekeya
|
|||
return nil
|
||||
}
|
||||
|
||||
// ExistNode is used determine if the node already exists.
|
||||
func (s *ClusterStatus) existNode(node *kubekeyapiv1alpha1.HostCfg) bool {
|
||||
var version bool
|
||||
_, name := s.allNodesInfo[node.Name]
|
||||
if name && s.allNodesInfo[node.Name] != "" {
|
||||
version = true
|
||||
}
|
||||
_, ip := s.allNodesInfo[node.InternalAddress]
|
||||
return version || ip
|
||||
}
|
||||
|
||||
// SyncKubeBinaries is used to sync kubernetes' binaries to each node.
|
||||
func SyncKubeBinaries(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
|
||||
|
|
|
|||
|
|
@ -11,28 +11,30 @@ import (
|
|||
|
||||
// PullImages defines the list of images that need to be downloaded in advance and downloads them.
|
||||
func PullImages(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
||||
i := images.Images{}
|
||||
i.Images = []images.Image{
|
||||
GetImage(mgr, "etcd"),
|
||||
GetImage(mgr, "pause"),
|
||||
GetImage(mgr, "kube-apiserver"),
|
||||
GetImage(mgr, "kube-controller-manager"),
|
||||
GetImage(mgr, "kube-scheduler"),
|
||||
GetImage(mgr, "kube-proxy"),
|
||||
GetImage(mgr, "coredns"),
|
||||
GetImage(mgr, "k8s-dns-node-cache"),
|
||||
GetImage(mgr, "calico-kube-controllers"),
|
||||
GetImage(mgr, "calico-cni"),
|
||||
GetImage(mgr, "calico-node"),
|
||||
GetImage(mgr, "calico-flexvol"),
|
||||
GetImage(mgr, "cilium"),
|
||||
GetImage(mgr, "operator-generic"),
|
||||
GetImage(mgr, "flannel"),
|
||||
GetImage(mgr, "kubeovn"),
|
||||
GetImage(mgr, "haproxy"),
|
||||
}
|
||||
if err := i.PullImages(mgr, node); err != nil {
|
||||
return err
|
||||
if !manager.ExistNode(mgr, node) {
|
||||
i := images.Images{}
|
||||
i.Images = []images.Image{
|
||||
GetImage(mgr, "etcd"),
|
||||
GetImage(mgr, "pause"),
|
||||
GetImage(mgr, "kube-apiserver"),
|
||||
GetImage(mgr, "kube-controller-manager"),
|
||||
GetImage(mgr, "kube-scheduler"),
|
||||
GetImage(mgr, "kube-proxy"),
|
||||
GetImage(mgr, "coredns"),
|
||||
GetImage(mgr, "k8s-dns-node-cache"),
|
||||
GetImage(mgr, "calico-kube-controllers"),
|
||||
GetImage(mgr, "calico-cni"),
|
||||
GetImage(mgr, "calico-node"),
|
||||
GetImage(mgr, "calico-flexvol"),
|
||||
GetImage(mgr, "cilium"),
|
||||
GetImage(mgr, "operator-generic"),
|
||||
GetImage(mgr, "flannel"),
|
||||
GetImage(mgr, "kubeovn"),
|
||||
GetImage(mgr, "haproxy"),
|
||||
}
|
||||
if err := i.PullImages(mgr, node); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
@ -40,8 +42,9 @@ func PullImages(mgr *manager.Manager, node *kubekeyapiv1alpha1.HostCfg) error {
|
|||
// GetImage defines the list of all images and gets image object by name.
|
||||
func GetImage(mgr *manager.Manager, name string) images.Image {
|
||||
var image images.Image
|
||||
var pauseTag string
|
||||
var pauseTag, corednsTag string
|
||||
|
||||
// get pause image tag
|
||||
cmp, err := versionutil.MustParseSemantic(mgr.Cluster.Kubernetes.Version).Compare("v1.21.0")
|
||||
if err != nil {
|
||||
mgr.Logger.Fatal("Failed to compare version: %v", err)
|
||||
|
|
@ -60,6 +63,13 @@ func GetImage(mgr *manager.Manager, name string) images.Image {
|
|||
pauseTag = "3.2"
|
||||
}
|
||||
|
||||
// get coredns image tag
|
||||
if cmp == -1 {
|
||||
corednsTag = "1.6.9"
|
||||
} else {
|
||||
corednsTag = "1.8.0"
|
||||
}
|
||||
|
||||
ImageList := map[string]images.Image{
|
||||
"pause": {RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: kubekeyapiv1alpha1.DefaultKubeImageNamespace, Repo: "pause", Tag: pauseTag, Group: kubekeyapiv1alpha1.K8s, Enable: true},
|
||||
"kube-apiserver": {RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: kubekeyapiv1alpha1.DefaultKubeImageNamespace, Repo: "kube-apiserver", Tag: mgr.Cluster.Kubernetes.Version, Group: kubekeyapiv1alpha1.Master, Enable: true},
|
||||
|
|
@ -68,7 +78,7 @@ func GetImage(mgr *manager.Manager, name string) images.Image {
|
|||
"kube-proxy": {RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: kubekeyapiv1alpha1.DefaultKubeImageNamespace, Repo: "kube-proxy", Tag: mgr.Cluster.Kubernetes.Version, Group: kubekeyapiv1alpha1.K8s, Enable: true},
|
||||
"etcd": {RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: kubekeyapiv1alpha1.DefaultKubeImageNamespace, Repo: "etcd", Tag: kubekeyapiv1alpha1.DefaultEtcdVersion, Group: kubekeyapiv1alpha1.Etcd, Enable: mgr.EtcdContainer},
|
||||
// network
|
||||
"coredns": {RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: "coredns", Repo: "coredns", Tag: "1.8.4", Group: kubekeyapiv1alpha1.K8s, Enable: true},
|
||||
"coredns": {RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: "coredns", Repo: "coredns", Tag: corednsTag, Group: kubekeyapiv1alpha1.K8s, Enable: true},
|
||||
"k8s-dns-node-cache": {RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: kubekeyapiv1alpha1.DefaultKubeImageNamespace, Repo: "k8s-dns-node-cache", Tag: "1.15.12", Group: kubekeyapiv1alpha1.K8s, Enable: mgr.Cluster.Kubernetes.EnableNodelocaldns()},
|
||||
"calico-kube-controllers": {RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: "calico", Repo: "kube-controllers", Tag: kubekeyapiv1alpha1.DefaultCalicoVersion, Group: kubekeyapiv1alpha1.K8s, Enable: strings.EqualFold(mgr.Cluster.Network.Plugin, "calico")},
|
||||
"calico-cni": {RepoAddr: mgr.Cluster.Registry.PrivateRegistry, Namespace: "calico", Repo: "cni", Tag: kubekeyapiv1alpha1.DefaultCalicoVersion, Group: kubekeyapiv1alpha1.K8s, Enable: strings.EqualFold(mgr.Cluster.Network.Plugin, "calico")},
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ package executor
|
|||
import (
|
||||
"fmt"
|
||||
"github.com/kubesphere/kubekey/pkg/connector/ssh"
|
||||
"github.com/kubesphere/kubekey/pkg/kubernetes"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
|
|
@ -90,7 +89,7 @@ func (executor *Executor) CreateManager() (*manager.Manager, error) {
|
|||
mgr.AddImagesRepo = executor.AddImagesRepo
|
||||
mgr.ObjName = executor.ObjName
|
||||
mgr.InCluster = executor.InCluster
|
||||
if executor.ContainerManager != kubernetes.Docker && executor.ContainerManager != "" {
|
||||
if executor.ContainerManager != manager.Docker && executor.ContainerManager != "" {
|
||||
mgr.Cluster.Kubernetes.ContainerManager = executor.ContainerManager
|
||||
}
|
||||
mgr.ContainerManager = executor.ContainerManager
|
||||
|
|
@ -98,10 +97,27 @@ func (executor *Executor) CreateManager() (*manager.Manager, error) {
|
|||
mgr.ClientSet = executor.ClientSet
|
||||
mgr.DownloadCommand = executor.DownloadCommand
|
||||
mgr.EtcdContainer = false
|
||||
// Description: Since docker is no the default container runtime of kubernetes, kubekey no longer uses docker to start etcd.
|
||||
//if (executor.Cluster.Kubernetes.ContainerManager == "" || executor.Cluster.Kubernetes.ContainerManager == "docker") && executor.Cluster.Kubernetes.Type != "k3s" {
|
||||
// mgr.EtcdContainer = true
|
||||
//}
|
||||
mgr.ClusterStatus = &manager.ClusterStatus{}
|
||||
mgr.UpgradeStatus = &manager.UpgradeStatus{CurrentVersions: map[string]string{}}
|
||||
|
||||
// store cri configuration
|
||||
switch mgr.Cluster.Kubernetes.ContainerManager {
|
||||
case manager.Docker:
|
||||
mgr.ContainerRuntimeEndpoint = ""
|
||||
case manager.Crio:
|
||||
mgr.ContainerRuntimeEndpoint = kubekeyapiv1alpha1.DefaultCrioEndpoint
|
||||
case manager.Conatinerd:
|
||||
mgr.ContainerRuntimeEndpoint = kubekeyapiv1alpha1.DefaultContainerdEndpoint
|
||||
case manager.Isula:
|
||||
mgr.ContainerRuntimeEndpoint = kubekeyapiv1alpha1.DefaultIsulaEndpoint
|
||||
default:
|
||||
mgr.ContainerRuntimeEndpoint = ""
|
||||
}
|
||||
|
||||
if mgr.Cluster.Kubernetes.ContainerRuntimeEndpoint != "" {
|
||||
mgr.ContainerRuntimeEndpoint = mgr.Cluster.Kubernetes.ContainerRuntimeEndpoint
|
||||
}
|
||||
|
||||
return mgr, nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,37 +22,68 @@ import (
|
|||
"github.com/kubesphere/kubekey/pkg/connector"
|
||||
"github.com/kubesphere/kubekey/pkg/util/runner"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"sync"
|
||||
)
|
||||
|
||||
const (
|
||||
IsInitCluster = true
|
||||
Docker = "docker"
|
||||
Conatinerd = "containerd"
|
||||
Crio = "crio"
|
||||
Isula = "isula"
|
||||
)
|
||||
|
||||
// Manager defines all the parameters needed for the installation.
|
||||
type Manager struct {
|
||||
ObjName string
|
||||
Cluster *kubekeyapiv1alpha1.ClusterSpec
|
||||
Logger log.FieldLogger
|
||||
Connector connector.Connector
|
||||
Runner *runner.Runner
|
||||
AllNodes []kubekeyapiv1alpha1.HostCfg
|
||||
EtcdNodes []kubekeyapiv1alpha1.HostCfg
|
||||
MasterNodes []kubekeyapiv1alpha1.HostCfg
|
||||
WorkerNodes []kubekeyapiv1alpha1.HostCfg
|
||||
K8sNodes []kubekeyapiv1alpha1.HostCfg
|
||||
EtcdContainer bool
|
||||
ClusterHosts []string
|
||||
WorkDir string
|
||||
KsEnable bool
|
||||
KsVersion string
|
||||
Debug bool
|
||||
SkipCheck bool
|
||||
SkipPullImages bool
|
||||
SourcesDir string
|
||||
AddImagesRepo bool
|
||||
InCluster bool
|
||||
ContainerManager string
|
||||
DeployLocalStorage bool
|
||||
Kubeconfig string
|
||||
Conditions []kubekeyapiv1alpha1.Condition
|
||||
ClientSet *kubekeyclientset.Clientset
|
||||
DownloadCommand func(path, url string) string
|
||||
ObjName string
|
||||
Cluster *kubekeyapiv1alpha1.ClusterSpec
|
||||
Logger log.FieldLogger
|
||||
Connector connector.Connector
|
||||
Runner *runner.Runner
|
||||
AllNodes []kubekeyapiv1alpha1.HostCfg
|
||||
EtcdNodes []kubekeyapiv1alpha1.HostCfg
|
||||
MasterNodes []kubekeyapiv1alpha1.HostCfg
|
||||
WorkerNodes []kubekeyapiv1alpha1.HostCfg
|
||||
K8sNodes []kubekeyapiv1alpha1.HostCfg
|
||||
EtcdContainer bool
|
||||
ClusterHosts []string
|
||||
WorkDir string
|
||||
KsEnable bool
|
||||
KsVersion string
|
||||
Debug bool
|
||||
SkipCheck bool
|
||||
SkipPullImages bool
|
||||
SourcesDir string
|
||||
AddImagesRepo bool
|
||||
InCluster bool
|
||||
ContainerManager string
|
||||
ContainerRuntimeEndpoint string
|
||||
DeployLocalStorage bool
|
||||
Kubeconfig string
|
||||
ClusterStatus *ClusterStatus
|
||||
UpgradeStatus *UpgradeStatus
|
||||
Conditions []kubekeyapiv1alpha1.Condition
|
||||
ClientSet *kubekeyclientset.Clientset
|
||||
DownloadCommand func(path, url string) string
|
||||
}
|
||||
|
||||
// ClusterStatus is used to store cluster status
|
||||
type ClusterStatus struct {
|
||||
IsExist bool
|
||||
Version string
|
||||
AllNodesInfo map[string]string
|
||||
Kubeconfig string
|
||||
BootstrapToken string
|
||||
CertificateKey string
|
||||
}
|
||||
|
||||
// UpgradeStatus is used to store cluster upgrade status
|
||||
type UpgradeStatus struct {
|
||||
CurrentVersions map[string]string
|
||||
CurrentVersionStr string
|
||||
NextVersionStr string
|
||||
MU *sync.Mutex
|
||||
Kubeconfig string
|
||||
}
|
||||
|
||||
// Copy is used to create a copy for Manager.
|
||||
|
|
@ -60,3 +91,14 @@ func (mgr *Manager) Copy() *Manager {
|
|||
newManager := *mgr
|
||||
return &newManager
|
||||
}
|
||||
|
||||
// ExistNode is used determine if the node already exists.
|
||||
func ExistNode(mgr *Manager, node *kubekeyapiv1alpha1.HostCfg) bool {
|
||||
var version bool
|
||||
_, name := mgr.ClusterStatus.AllNodesInfo[node.Name]
|
||||
if name && mgr.ClusterStatus.AllNodesInfo[node.Name] != "" {
|
||||
version = true
|
||||
}
|
||||
_, ip := mgr.ClusterStatus.AllNodesInfo[node.InternalAddress]
|
||||
return version || ip
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ func SupportedK8sVersionList() []string {
|
|||
"v1.19.9",
|
||||
"v1.20.4",
|
||||
"v1.20.6",
|
||||
"v1.20.10",
|
||||
"v1.21.4",
|
||||
"v1.22.1",
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue