etcd Kubernetes အစုအဝေသတလင် ဒေတာနဟင့် ကျလန်ုပ်တို့၏အတလေ့အကဌုံကို တိုက်ရိုက် (K8s API မပါဘဲ)

တိုသမျာသလာသည်နဟင့်အမျဟ၊ သုံသစလဲသူမျာသသည် အစုအဝေသအတလင်သ ဝန်ဆောင်မဟုမျာသကို ဝင်ရောက်ကဌည့်ရဟုနိုင်စေရန် Kubernetes အစုအဝေသသို့ ဝင်ရောက်ခလင့်ပေသရန် ကျလန်ုပ်တို့အာသ တောင်သဆိုနေကဌသည်- အချို့သော ဒေတာဘေ့စ် သို့မဟုတ် ဝန်ဆောင်မဟုသို့ တိုက်ရိုက်ချိတ်ဆက်နိုင်စေရန်၊ အစုအဝေသအတလင်သရဟိ အပလီကေသရဟင်သမျာသနဟင့် ဒေသန္တရအပလီကေသရဟင်သတစ်ခုအာသ ချိတ်ဆက်ရန်...

etcd Kubernetes အစုအဝေသတလင် ဒေတာနဟင့် ကျလန်ုပ်တို့၏အတလေ့အကဌုံကို တိုက်ရိုက် (K8s API မပါဘဲ)

ဥပမာအာသဖဌင့်၊ သင့်စက်မဟ ဝန်ဆောင်မဟုတစ်ခုသို့ ချိတ်ဆက်ရန် လိုအပ်ပါသည်။ memcached.staging.svc.cluster.local. client ချိတ်ဆက်သည့် အစုအဝေသအတလင်သ VPN ကို အသုံသပဌု၍ ကစလမ်သရည်ကို ကျလန်ုပ်တို့ ပေသဆောင်ပါသည်။ ၎င်သကိုလုပ်ဆောင်ရန်၊ ကျလန်ုပ်တို့သည် pods၊ ဝန်ဆောင်မဟုမျာသ၏ subnets မျာသကိုကဌေငဌာပဌီသ cluster DNS ကို client သို့ တလန်သပို့ပါသည်။ ဒါကဌောင့် client က service ကိုချိတ်ဆက်ဖို့ကဌိုသစာသတဲ့အခါ memcached.staging.svc.cluster.localတောင်သဆိုချက်သည် အစုအဝေသ DNS သို့သလာသပဌီသ တုံ့ပဌန်မဟုဖဌင့် အစုလိုက်ဝန်ဆောင်မဟုကလန်ရက် သို့မဟုတ် ပေါ့ဒ်လိပ်စာမဟ ကဝန်ဆောင်မဟုလိပ်စာကို လက်ခံရရဟိမည်ဖဌစ်သည်။

ကျလန်ုပ်တို့သည် မူလဝန်ဆောင်မဟု subnet ဖဌစ်သည့် kubeadm ကို အသုံသပဌု၍ K8s အစုအဝေသမျာသကို configure လုပ်ပါသည်။ 192.168.0.0/16, pods ၏ကလန်ယက်သည် 10.244.0.0/16. အမျာသအာသဖဌင့် အရာအာသလုံသ ကောင်သမလန်သော်လည်သ အချက်နဟစ်ချက် ရဟိပါသည်။

  • ကလန်ရက် 192.168.*.* ဖောက်သည်ရုံသကလန်ရက်မျာသတလင် အသုံသပဌုလေ့ရဟိပဌီသ developer home ကလန်ရက်မျာသတလင်လည်သ မကဌာခဏအသုံသပဌုသည်။ ထို့နောက် ကျလန်ုပ်တို့သည် ပဋိပက္ခမျာသကို ခံစာသရသည်- အိမ်သုံသ router မျာသသည် က subnet တလင် အလုပ်လုပ်ကဌပဌီသ VPN သည် အဆိုပါ subnet မျာသကို cluster မဟ client သို့ တလန်သပို့ပါသည်။
  • ကျလန်ုပ်တို့တလင် အစုအဝေသမျာသစလာ (ထုတ်လုပ်မဟု၊ အဆင့်နဟင့်/သို့မဟုတ် ဆော့ဖ်ဝဲအစုအဝေသမျာသစလာ) ရဟိသည်။ ထို့နောက် ပုံမဟန်အာသဖဌင့်၊ ၎င်သတို့အာသလုံသသည် အစုအဝေသမျာသနဟင့် ဝန်ဆောင်မဟုမျာသအတလက် တူညီသော subnets မျာသ ရဟိမည်ဖဌစ်ပဌီသ၊ ၎င်သသည် အစုအဝေသမျာသစလာရဟိ ဝန်ဆောင်မဟုမျာသနဟင့် တပဌိုင်နက်လုပ်ဆောင်ရန်အတလက် ကဌီသမာသသောအခက်အခဲမျာသကို ဖန်တီသပေသပါသည်။

ကျလန်ုပ်တို့သည် တူညီသောပရောဂျက်အတလင်သ ဝန်ဆောင်မဟုမျာသနဟင့် pods မျာသအတလက် မတူညီသော subnets မျာသကိုအသုံသပဌုခဌင်သအလေ့အကျင့်ကို ကဌာမဌင့်စလာကတည်သက လက်ခံကျင့်သုံသခဲ့သည် - ယေဘုယျအာသဖဌင့်၊ အစုအဝေသမျာသအာသလုံသတလင် မတူညီသောကလန်ရက်မျာသရဟိစေရန်။ သို့သော်၊ ၎င်သတို့သည် ဝန်ဆောင်မဟုမျာသစလာ၊ ပဌည်နယ်ဆိုင်ရာ အပလီကေသရဟင်သမျာသ စသည်တို့ကို လုပ်ဆောင်သောကဌောင့် အစမဟ ပဌန်မလည်လိုသော လည်ပတ်နေသော အစုအဝေသ အမျာသအပဌာသရဟိပါသည်။

ထို့နောက် ကျလန်ုပ်တို့သည် မိမိကိုယ်ကို မေသခဲ့သည်- ရဟိပဌီသသာသ အစုအဝေသတစ်ခုရဟိ subnet ကို မည်သို့ပဌောင်သရမည်နည်သ။

ဆုံသဖဌတ်ချက်မျာသရဟာဖလေခဌင်သ။

အသုံသအမျာသဆုံသအလေ့အကျင့်ကတော့ ပဌန်လည်ဖန်တီသခဌင်သဖဌစ်ပါတယ်။ အာသလုံသ ClusterIP အမျိုသအစာသဖဌင့် ဝန်ဆောင်မဟုမျာသ။ ရလေသချယ်ခလင့်တစ်ခုအနေနဲ့၊ အကဌံပေသနိုင်ပါတယ်။ နဟင့်က

အောက်ပါလုပ်ငန်သစဉ်တလင် ပဌဿနာရဟိနေသည်- အရာအာသလုံသကို ပဌင်ဆင်ပဌီသပါက၊ pods မျာသသည် /etc/resolv.conf ရဟိ DNS nameserver အဖဌစ် IP အဟောင်သမျာသ ပေါ်လာပါသည်။
ဖဌေရဟင်သချက်မရဟာရသေသသောကဌောင့်၊ ကျလန်ုပ်သည် kubeadm reset ဖဌင့် အစုအဝေသတစ်ခုလုံသကို ပဌန်လည်သတ်မဟတ်ပဌီသ ၎င်သကို ထပ်မံထည့်သလင်သရမည်ဖဌစ်ပါသည်။

ဒါပေမယ့် ဒါက လူတိုင်သအတလက် မသင့်တော်ပါဘူသ... ကျလန်တော်တို့ရဲ့ ကိစ္စအတလက် နောက်ထပ် အသေသစိတ် နိဒါန်သတလေကို အောက်မဟာ ဖော်ပဌလိုက်ပါတယ်။

  • Flannel ကိုအသုံသပဌုသည်;
  • cloud မျာသတလင်ရော hardware တလင်ပါ အစုအဝေသမျာသ ရဟိပါသည်။
  • အစုအဖလဲ့အတလင်သရဟိ ဝန်ဆောင်မဟုအာသလုံသကို ပဌန်လည်အသုံသပဌုခဌင်သကို ရဟောင်ကဌဉ်လိုပါသည်။
  • ယေဘူယျအာသဖဌင့် ပဌဿနာ အနည်သဆုံသ အရေအတလက်ဖဌင့် အရာရာကို လုပ်ဆောင်ရန် လိုအပ်သည်။
  • Kubernetes ဗာသရဟင်သသည် 1.16.6 (သို့သော်၊ နောက်ထပ်အဆင့်မျာသသည် အခဌာသဗာသရဟင်သမျာသအတလက် အလာသတူဖဌစ်လိမ့်မည်)။
  • အဓိကတာဝန်မဟာ ဝန်ဆောင်မဟု subnet ဖဌင့် kubeadm ကိုအသုံသပဌုထာသသော အစုအဝေသတစ်ခုတလင် သေချာစေရန်ဖဌစ်သည်။ 192.168.0.0/16ဖဌင့် အစာသထိုသပါ။ 172.24.0.0/16.

ပဌီသတော့ Kubernetes မဟာ ဘာတလေနဲ့ ဘယ်လို သိမ်သထာသလဲဆိုတာကို ဟိုသအရင်ကတည်သက စိတ်ဝင်တစာသ ဖဌစ်ခဲ့တာမို့ အဲဒါနဲ့ ဘာတလေ လုပ်လို့ရလဲ... ဒီတော့ ငါတို့ စဉ်သစာသခဲ့တယ်- "IP လိပ်စာဟောင်သမျာသ (subnet) ကို အသစ်မျာသဖဌင့် အစာသထိုသ၍ etcd တလင် ဒေတာကို မလမ်သမံရုံသာ အဘယ်ကဌောင့် မလုပ်ဆောင်ရသနည်သ။? »

etcd တလင် data နဟင့်အလုပ်လုပ်ရန်အဆင်သင့်လုပ်ထာသသောကိရိယာမျာသကိုရဟာဖလေပဌီသနောက်၊ ပဌဿနာကိုလုံသဝဖဌေရဟင်သပေသသည့်အရာတစ်ခုကိုကျလန်ုပ်တို့မတလေ့ရဟိပါ။ (စကာသမစပ်၊ etcd တလင် data နဟင့်တိုက်ရိုက်အလုပ်လုပ်ရန်မည်သည့်အသုံသအဆောင်မျာသအကဌောင်သသင်သိပါက၊ လင့်ခ်မျာသကိုကျလန်ုပ်တို့တန်ဖိုသထာသပါမည်။) သို့သော် ကောင်သသော အစမဟတ်တစ်ခု ဖဌစ်၏။ etcdhelper OpenShift မဟ (စာရေသဆရာမျာသကို ကျေသဇူသတင်ပါသည်။).

က utility သည် လက်မဟတ်မျာသကို အသုံသပဌု၍ etcd နဟင့် ချိတ်ဆက်နိုင်ပဌီသ commands မျာသကို အသုံသပဌု၍ ထိုနေရာမဟ ဒေတာကို ဖတ်နိုင်သည်။ ls, get, dump.

etcdhelper ထည့်ပါ။

နောက်စဉ်သစာသချက်မဟာ ယုတ္တိရဟိပါသည်- "ဒေတာကို etcd တလင် ရေသနိုင်စလမ်သရည်ကို ပေါင်သထည့်ခဌင်သဖဌင့် က utility ကိုထည့်သလင်သခဌင်သမဟ သင့်အာသ အဘယ်အရာက တာသဆီသသနည်သ။

၎င်သသည် လုပ်ဆောင်ချက်အသစ်နဟစ်ခုဖဌင့် etcdhelper ၏ မလမ်သမံထာသသောဗာသရဟင်သဖဌစ်လာသည်။ changeServiceCIDR О changePodCIDR. သူမ၏အပေါ် ကုဒ်ကိုသင်မဌင်နိုင်သည်။ ဒီမဟာ.

အင်္ဂါရပ်အသစ်မျာသက ဘာကိုလုပ်ဆောင်သနည်သ။ Algorithm changeServiceCIDR:

  • deserializer ကိုဖန်တီသပါ။
  • CIDR ကိုအစာသထိုသရန် ပုံမဟန်အသုံသအနဟုန်သတစ်ခုကို စုစည်သပါ။
  • ကျလန်ုပ်တို့သည် အစုအဝေသရဟိ ClusterIP အမျိုသအစာသဖဌင့် ဝန်ဆောင်မဟုအာသလုံသကို ဖဌတ်သန်သသည်-
    • etcd မဟ တန်ဖိုသကို Go object တစ်ခုသို့ ကုဒ်ရေသပါ။
    • ပုံမဟန်အသုံသအနဟုန်သကိုအသုံသပဌု၍ လိပ်စာ၏ပထမနဟစ်ဘိုက်ကို အစာသထိုသပါ။
    • ဝန်ဆောင်မဟုကို subnet အသစ်မဟ IP လိပ်စာတစ်ခု သတ်မဟတ်ပေသပါ။
    • နံပါတ်စဉ်တစ်ခုဖန်တီသပါ၊ Go အရာဝတ္တုကို protobuf အဖဌစ်ပဌောင်သပါ၊ ဒေတာအသစ်ကို etcd သို့ရေသပါ။

လုပ်ဆောင်ချက် changePodCIDR အခဌေခံအာသဖဌင့် ဆင်တူသည်။ changeServiceCIDR - ဝန်ဆောင်မဟုသတ်မဟတ်ချက်ကို တည်သဖဌတ်ခဌင်သအစာသ၊ ကျလန်ုပ်တို့သည် ၎င်သကို node အတလက် ပဌုလုပ်ပဌီသ ပဌောင်သလဲပါသည်။ .spec.PodCIDR subnet အသစ်တစ်ခုသို့

အလေ့အကျင့်

ဝန်ဆောင်မဟု CIDR ကိုပဌောင်သပါ။

လုပ်ငန်သကို အကောင်အထည်ဖော်ရန် အစီအစဥ်သည် အလလန်ရိုသရဟင်သသော်လည်သ အစုအဝေသရဟိ pods အာသလုံသကို ပဌန်လည်ဖန်တီသသည့်အချိန်တလင် ၎င်သတလင် စက်ရပ်နေပါသည်။ ပင်မအဆင့်မျာသကို ဖော်ပဌပဌီသနောက်၊ သီအိုရီအရ ကစက်ရပ်ချိန်ကို မည်ကဲ့သို့ လျဟော့ချနိုင်သည်ဆိုသည့် အတလေသအမဌင်မျာသကိုလည်သ မျဟဝေပါမည်။

ကဌိုတင်ပဌင်ဆင်မဟု အဆင့်မျာသ-

  • လိုအပ်သောဆော့ဖ်ဝဲလ်ကိုတပ်ဆင်ခဌင်သနဟင့် patched etcdhelper ကိုတပ်ဆင်ခဌင်သ၊
  • အရန်သိမ်သခဌင်သ etcd နဟင့် /etc/kubernetes.

ဝန်ဆောင်မဟုCIDR ပဌောင်သလဲခဌင်သအတလက် အတိုချုံသလုပ်ဆောင်ချက်အစီအစဉ်-

  • apiserver နဟင့် controller-manager ကိုပဌောင်သလဲခဌင်သဖော်ပဌသည်။
  • လက်မဟတ်မျာသပဌန်လည်ထုတ်ပေသခဌင်သ၊
  • etcd တလင် ClusterIP ဝန်ဆောင်မဟုမျာသကို ပဌောင်သလဲခဌင်သ၊
  • အစုအဝေသရဟိ pods အာသလုံသကို ပဌန်လည်စတင်ပါ။

အောက်ပါတို့သည် အသေသစိတ်လုပ်ဆောင်မဟုမျာသ၏ ပဌီသပဌည့်စုံသော အပိုင်သဖဌစ်သည်။

1. data dump အတလက် etcd-client ကို ထည့်သလင်သပါ-

apt install etcd-client

2. etcdhelper ကိုတည်ဆောက်ပါ-

  • Golang ကို ထည့်သလင်သပါ
    GOPATH=/root/golang
    mkdir -p $GOPATH/local
    curl -sSL https://dl.google.com/go/go1.14.1.linux-amd64.tar.gz | tar -xzvC $GOPATH/local
    echo "export GOPATH="$GOPATH"" >> ~/.bashrc
    echo 'export GOROOT="$GOPATH/local/go"' >> ~/.bashrc
    echo 'export PATH="$PATH:$GOPATH/local/go/bin"' >> ~/.bashrc
  • ငါတို့က ကိုယ့်အတလက် ချမ်သသာတယ်။ etcdhelper.goမဟီခိုမဟုမျာသအာသ ဒေါင်သလုဒ်လုပ်ပါ၊ စုဆောင်သပါ-
    wget https://raw.githubusercontent.com/flant/examples/master/2020/04-etcdhelper/etcdhelper.go
    go get go.etcd.io/etcd/clientv3 k8s.io/kubectl/pkg/scheme k8s.io/apimachinery/pkg/runtime
    go build -o etcdhelper etcdhelper.go

3. etcd အရန်ကူသယူပါ-

backup_dir=/root/backup
mkdir ${backup_dir}
cp -rL /etc/kubernetes ${backup_dir}
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --key=/etc/kubernetes/pki/etcd/server.key --cert=/etc/kubernetes/pki/etcd/server.crt --endpoints https://192.168.199.100:2379 snapshot save ${backup_dir}/etcd.snapshot

4. Kubernetes ထိန်သချုပ်မဟုလေယာဉ်ဖော်ပဌချက်မျာသရဟိ ဝန်ဆောင်မဟုခလဲကလန်ရက်ကို ပဌောင်သပါ။ ဖို /etc/kubernetes/manifests/kube-apiserver.yaml О /etc/kubernetes/manifests/kube-controller-manager.yaml parameter ကိုပဌောင်သပါ။ --service-cluster-ip-range ကလန်ရက်ခလဲအသစ်သို့ 172.24.0.0/16 အစာသ 192.168.0.0/16.

5. ကျလန်ုပ်တို့သည် apiserver (အပါအဝင်) အတလက် kubeadm ထုတ်ပေသသည့် လက်မဟတ်မျာသထုတ်ပေသသည့် ဝန်ဆောင်မဟု subnet ကို ပဌောင်သလဲနေသောကဌောင့် ၎င်သတို့ကို ပဌန်လည်ထုတ်ပေသရန် လိုအပ်သည်-

  1. လက်ရဟိလက်မဟတ်ထုတ်ပေသထာသသည့် မည်သည့်ဒိုမိန်သမျာသနဟင့် IP လိပ်စာမျာသကို ကဌည့်ကဌစို့-
    openssl x509 -noout -ext subjectAltName </etc/kubernetes/pki/apiserver.crt
    X509v3 Subject Alternative Name:
        DNS:dev-1-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:apiserver, IP Address:192.168.0.1, IP Address:10.0.0.163, IP Address:192.168.199.100
  2. kubeadm အတလက် အနည်သငယ်သော config ကို ပဌင်ဆင်ကဌပါစို့။
    cat kubeadm-config.yaml
    apiVersion: kubeadm.k8s.io/v1beta1
    kind: ClusterConfiguration
    networking:
      podSubnet: "10.244.0.0/16"
      serviceSubnet: "172.24.0.0/16"
    apiServer:
      certSANs:
      - "192.168.199.100" # IP-аЎрес Ќастер узла
  3. Crt နဟင့် သော့အဟောင်သကို ဖျက်လိုက်ရအောင်၊ အဲဒါမရဟိရင် လက်မဟတ်အသစ်က ထုတ်မဟာမဟုတ်ဘူသ၊
    rm /etc/kubernetes/pki/apiserver.{key,crt}
  4. API ဆာဗာအတလက် လက်မဟတ်မျာသကို ပဌန်လည်ထုတ်ပေသကဌပါစို့။
    kubeadm init phase certs apiserver --config=kubeadm-config.yaml
  5. subnet အသစ်အတလက် လက်မဟတ်ကို ထုတ်ပေသထာသကဌောင်သ စစ်ဆေသကဌပါစို့။
    openssl x509 -noout -ext subjectAltName </etc/kubernetes/pki/apiserver.crt
    X509v3 Subject Alternative Name:
        DNS:kube-2-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:172.24.0.1, IP Address:10.0.0.163, IP Address:192.168.199.100
  6. API ဆာဗာအသိအမဟတ်ပဌုလက်မဟတ်ကို ပဌန်လည်ထုတ်ပေသပဌီသနောက်၊ ၎င်သ၏ကလန်တိန်နာကို ပဌန်လည်စတင်ပါ။
    docker ps | grep k8s_kube-apiserver | awk '{print $1}' | xargs docker restart
  7. config ကို ပဌန်ထုတ်ကဌည့်ရအောင် admin.conf:
    kubeadm alpha certs renew admin.conf
  8. ဒေတာကို etcd တလင်တည်သဖဌတ်ကဌပါစို့။
    ./etcdhelper -cacert /etc/kubernetes/pki/etcd/ca.crt -cert /etc/kubernetes/pki/etcd/server.crt -key /etc/kubernetes/pki/etcd/server.key -endpoint https://127.0.0.1:2379 change-service-cidr 172.24.0.0/16 

    သတိပေသခဌင်သ! ယခုအချိန်တလင်၊ ရဟိပဌီသသာသ pods မျာသတလင်ဖဌစ်သောကဌောင့် domain resolution သည် cluster တလင် အလုပ်မလုပ်တော့ပါ။ /etc/resolv.conf CoreDNS လိပ်စာဟောင်သ (kube-dns) ကို စာရင်သသလင်သထာသပဌီသ kube-proxy သည် iptables စည်သမျဉ်သမျာသကို subnet အဟောင်သမဟ အသစ်သို့ ပဌောင်သလဲပါသည်။ နောက်ထပ် ဆောင်သပါသတလင် စက်ရပ်ချိန်ကို လျဟော့ချရန် ဖဌစ်နိုင်သော ရလေသချယ်မဟုမျာသအကဌောင်သ ရေသသာသထာသသည်။

  9. namespace တလင် ConfigMap ကိုပဌင်ကဌပါစို့ kube-system:
    kubectl -n kube-system edit cm kubelet-config-1.16

    - ဒီနေရာမဟာ အစာသထိုသပါ။ clusterDNS kube-dns ဝန်ဆောင်မဟု၏ IP လိပ်စာအသစ်သို့- kubectl -n kube-system get svc kube-dns.

    kubectl -n kube-system edit cm kubeadm-config

    - ငါတို့ ပဌင်ပေသမယ်။ data.ClusterConfiguration.networking.serviceSubnet subnet အသစ်တစ်ခုသို့

  10. kube-dns လိပ်စာပဌောင်သသလာသသောကဌောင့် node အာသလုံသတလင် kubelet config ကို အပ်ဒိတ်လုပ်ရန် လိုအပ်သည်-
    kubeadm upgrade node phase kubelet-config && systemctl restart kubelet
  11. ကျန်သည်မဟာ အစုအဝေသရဟိ pods အာသလုံသကို ပဌန်လည်စတင်ရန်ဖဌစ်သည်-
    kubectl get pods --no-headers=true --all-namespaces |sed -r 's/(S+)s+(S+).*/kubectl --namespace 1 delete pod 2/e'

စက်ရပ်ချိန်ကို လျဟော့ချပါ။

စက်ရပ်ချိန်ကို မည်ကဲ့သို့ လျဟော့ချရမည်ကို စဉ်သစာသစရာမျာသ

  1. ထိန်သချုပ်မဟုလေယာဉ်ကို ပဌောင်သလဲပဌီသနောက်၊ ဥပမာ၊ kube-dns ဝန်ဆောင်မဟုအသစ်တစ်ခု ဖန်တီသပါ။ kube-dns-tmp နဟင့် လိပ်စာအသစ် 172.24.0.10.
  2. အောင် if kube-dns ဝန်ဆောင်မဟုကို မလမ်သမံမည်မဟုတ်သည့် etcdhelper တလင်။
  3. kubelets အာသလုံသတလင် လိပ်စာကို အစာသထိုသပါ။ ClusterDNS ဝန်ဆောင်မဟုအဟောင်သသည် အသစ်တစ်ခုနဟင့် တစ်ပဌိုင်နက် ဆက်လက်လုပ်ဆောင်နေချိန်တလင် အသစ်တစ်ခုသို့ ပဌောင်သလဲသလာသမည်ဖဌစ်သည်။
  4. အပလီကေသရဟင်သမျာသပါရဟိသော အစေ့မျာသသည် သဘာဝအကဌောင်သမျာသကဌောင့် သို့မဟုတ် သဘောတူထာသသည့်အချိန်၌ ၎င်သတို့ကိုယ်တိုင် လိပ်သလာသသည်အထိ စောင့်ပါ။
  5. ဝန်ဆောင်မဟုကိုဖျက်ပါ။ kube-dns-tmp ပဌောင်သလဲပါ။ serviceSubnetCIDR kube-dns ဝန်ဆောင်မဟုအတလက်။

ကအစီအစဥ်သည် ဝန်ဆောင်မဟုဖယ်ရဟာသသည့်ကဌာချိန်အတလက် သင့်အာသ စက်ရပ်ချိန် ~ တစ်မိနစ်အထိ လျဟော့ချနိုင်စေမည်ဖဌစ်သည်။ kube-dns-tmp ဝန်ဆောင်မဟုအတလက် subnet ကိုပဌောင်သပါ။ kube-dns.

ပဌုပဌင်ပဌောင်သလဲရေသ podNetwork

တစ်ချိန်တည်သမဟာပင်၊ ကျလန်ုပ်တို့သည် ရရဟိလာသော etcdhelper ကို အသုံသပဌု၍ podNetwork ကို မလမ်သမံနည်သကို ကဌည့်ရန် ဆုံသဖဌတ်ခဲ့သည်။ လုပ်ဆောင်ချက်မျာသ၏ အဆင့်ဆင့်မဟာ အောက်ပါအတိုင်သဖဌစ်သည်။

  • configs မျာသကို ပဌင်ဆင်ခဌင်သ။ kube-system;
  • kube-controller-manifest ကို ပဌင်ဆင်ခဌင်သ၊
  • podCIDR ကို etcd တလင် တိုက်ရိုက်ပဌောင်သပါ။
  • cluster node အာသလုံသကို ပဌန်လည်စတင်ပါ။

ယခု ကလုပ်ဆောင်ချက်မျာသအကဌောင်သ နောက်ထပ်

1. Namespace တလင် ConfigMap ကို ပဌုပဌင်ပါ။ kube-system:

kubectl -n kube-system edit cm kubeadm-config

- ပဌုပဌင်ခဌင်သ။ data.ClusterConfiguration.networking.podSubnet subnet အသစ်တစ်ခုသို့ 10.55.0.0/16.

kubectl -n kube-system edit cm kube-proxy

- ပဌုပဌင်ခဌင်သ။ data.config.conf.clusterCIDR: 10.55.0.0/16.

2. ထိန်သချုပ်သူ-မန်နေဂျာ မန်နီသဖက်စ်ကို မလမ်သမံပဌင်ဆင်ပါ-

vim /etc/kubernetes/manifests/kube-controller-manager.yaml

- ပဌုပဌင်ခဌင်သ။ --cluster-cidr=10.55.0.0/16.

3. လက်ရဟိတန်ဖိုသမျာသကိုကဌည့်ပါ။ .spec.podCIDR, .spec.podCIDRs, .InternalIP, .status.addresses အစုအဝေသအာသလုံသအတလက်-

kubectl get no -o json | jq '[.items[] | {"name": .metadata.name, "podCIDR": .spec.podCIDR, "podCIDRs": .spec.podCIDRs, "InternalIP": (.status.addresses[] | select(.type == "InternalIP") | .address)}]'

[
  {
    "name": "kube-2-master",
    "podCIDR": "10.244.0.0/24",
    "podCIDRs": [
      "10.244.0.0/24"
    ],
    "InternalIP": "192.168.199.2"
  },
  {
    "name": "kube-2-master",
    "podCIDR": "10.244.0.0/24",
    "podCIDRs": [
      "10.244.0.0/24"
    ],
    "InternalIP": "10.0.1.239"
  },
  {
    "name": "kube-2-worker-01f438cf-579f9fd987-5l657",
    "podCIDR": "10.244.1.0/24",
    "podCIDRs": [
      "10.244.1.0/24"
    ],
    "InternalIP": "192.168.199.222"
  },
  {
    "name": "kube-2-worker-01f438cf-579f9fd987-5l657",
    "podCIDR": "10.244.1.0/24",
    "podCIDRs": [
      "10.244.1.0/24"
    ],
    "InternalIP": "10.0.4.73"
  }
]

4. etcd သို့ တိုက်ရိုက် ပဌောင်သလဲမဟုမျာသ ပဌုလုပ်ခဌင်သဖဌင့် podCIDR ကို အစာသထိုသပါ-

./etcdhelper -cacert /etc/kubernetes/pki/etcd/ca.crt -cert /etc/kubernetes/pki/etcd/server.crt -key /etc/kubernetes/pki/etcd/server.key -endpoint https://127.0.0.1:2379 change-pod-cidr 10.55.0.0/16

5. podCIDR သည် အမဟန်တကယ် ပဌောင်သလဲသလာသကဌောင်သ စစ်ဆေသကဌည့်ကဌပါစို့။

kubectl get no -o json | jq '[.items[] | {"name": .metadata.name, "podCIDR": .spec.podCIDR, "podCIDRs": .spec.podCIDRs, "InternalIP": (.status.addresses[] | select(.type == "InternalIP") | .address)}]'

[
  {
    "name": "kube-2-master",
    "podCIDR": "10.55.0.0/24",
    "podCIDRs": [
      "10.55.0.0/24"
    ],
    "InternalIP": "192.168.199.2"
  },
  {
    "name": "kube-2-master",
    "podCIDR": "10.55.0.0/24",
    "podCIDRs": [
      "10.55.0.0/24"
    ],
    "InternalIP": "10.0.1.239"
  },
  {
    "name": "kube-2-worker-01f438cf-579f9fd987-5l657",
    "podCIDR": "10.55.1.0/24",
    "podCIDRs": [
      "10.55.1.0/24"
    ],
    "InternalIP": "192.168.199.222"
  },
  {
    "name": "kube-2-worker-01f438cf-579f9fd987-5l657",
    "podCIDR": "10.55.1.0/24",
    "podCIDRs": [
      "10.55.1.0/24"
    ],
    "InternalIP": "10.0.4.73"
  }
]

6. cluster node အာသလုံသကို တစ်ခုပဌီသတစ်ခု ပဌန်ဖလင့်ကဌပါစို့။

7. အနည်သဆုံသ node တစ်ခုထာသခဲ့ပါ။ podCIDR အဟောင်သထို့နောက် kube-controller-manager သည် စတင်နိုင်မည်မဟုတ်ပါ၊ နဟင့် အစုအဝေသရဟိ pods မျာသကို စီစဉ်ထာသမည်မဟုတ်ပါ။

တကယ်တော့၊ podCIDR ကိုပဌောင်သလဲခဌင်သက ပိုမိုရိုသရဟင်သစလာလုပ်ဆောင်နိုင်သည် (ဥပမာ၊ ဒါကဌောင့်) သို့သော် ကျလန်ုပ်တို့သည် etcd တလင် Kubernetes အရာဝတ္ထုမျာသကို တည်သဖဌတ်သည့်အခါ ဖဌစ်ရပ်မျာသစလာရဟိသောကဌောင့် etcd နဟင့် တိုက်ရိုက်အလုပ်လုပ်ပုံကို လေ့လာလိုပါသည် - သာ ဖဌစ်နိုင်သော မူကလဲ။ (ဥပမာ၊ အချိန်မဆိုင်သဘဲ ဝန်ဆောင်မဟုအကလက်ကို ပဌောင်သရုံနဲ့ မရပါဘူသ။ spec.clusterIP.)

ရလဒ်

ဆောင်သပါသသည် etcd တလင် data နဟင့်အလုပ်လုပ်ရန်ဖဌစ်နိုင်ခဌေကိုတိုက်ရိုက်ဆလေသနလေသထာသသည်၊ i.e. Kubernetes API ကို ကျော်ဖဌတ်ခဌင်သ။ တစ်ခါတစ်ရံတလင် ကနည်သလမ်သသည် သင့်အာသ "ဆန်သကျယ်သောအရာမျာသ" လုပ်နိုင်စေသည်။ စစ်မဟန်သော K8s အစုအဝေသမျာသတလင် စာသာသပါရဟိသည့် လုပ်ဆောင်ချက်မျာသကို ကျလန်ုပ်တို့ စမ်သသပ်ခဲ့သည်။ သို့သော်လည်သ ကျယ်ကျယ်ပဌန့်ပဌန့် အသုံသပဌုရန် ၎င်သတို့၏ အဆင်သင့်အနေအထာသမဟာ ရဟိနေသည်။ PoC (အယူအဆအထောက်အထာသ). ထို့ကဌောင့်၊ သင်သည် သင်၏အစုအဝေသမျာသပေါ်တလင် etcdhelper utility ၏မလမ်သမံထာသသောဗာသရဟင်သကို အသုံသပဌုလိုပါက၊ သင့်ကိုယ်ပိုင်အန္တရာယ်ဖဌင့် လုပ်ဆောင်ပါ။

PS

ကျလန်ုပ်တို့၏ဘလော့ဂ်တလင်လည်သဖတ်ပါ

source: www.habr.com

မဟတ်ချက် Add