kubeadmを介してk8sクラスターを構築する


====== kubeadmを介してk8sクラスターを構築する======

1.統合バージョン
  ドッカー18.09.0
  ---
  kubeadm-1.14.0-0 
  kubelet-1.14.0-0 
  kubectl-1.14.0-0
  ---
  k8s.gcr.io/kube-apiserver:v1.14.0
  K8S。 gcr.io/kube-controller-manager:v1.14.0
  k8s.gcr.io/kube-scheduler:v1.14.0
  k8s.gcr.io/kube-proxy:v1.14.0
  k8s.gcr.io/pause:3.1
  k8s gcr.io/etcd:3.3.10
  k8s.gcr.io/coredns:1.3.1
  --- calico
  :v3.9
  
2. 3セントを準備して、相互にpingできること、つまり、同じ場所にあることを確認します。 network Inでは、仮想マシンの構成要件も上記で説明されています。

3.依存関係を更新してインストールします。3台すべてのマシンで
  [yum-y update]
  [yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp]を実行する必要があり
  
ます。

5.ホストファイルを変更します

  1)、マスターノード:[sudo hostnamectl set-hostname m]
  
  2)、それぞれ2つのワーカー
  [sudo hostnamectl set-hostname w1]
  [sudo hostnamectl set-hostname w2]
  
3. 3つのノードすべてがhostsファイルに追加されます:[Vi / etc / hosts]
  192.168.8.51 m
  192.168.8.61 w1
  192.168.8.62 w2 4.pingを
  
使用してテストします。[pingw1]

5.システムの基本的な前提構成
  #(1)ファイアウォールをオフにします
  systemctl stopファイアウォールd && systemctl disableファイアウォールd
  
  #(2)selinux
  setenforce 0
  sed -i's / ^ SELINUX = enforcing $ / SELINUX = permitill / '/ etc / selinux /をオフにしますconfig
  
  #(3)スワップスワップ
  オフを閉じる-a
  sed -i '/ swap / s / ^ \
  
  (。* \)$ / \ 1 / g' / etc / fstab #(4)
  iptablesのACCEPTルールを構成するiptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
  
  #(5)システムパラメータを設定します
  cat << EOF> /etc/sysctl.d/k8s.confnet.bridge
  。 bridge -nf-call-ip6tables = 1
  net.bridge.bridge-nf-call-iptables = 1
  EOF
  
  sysctl --system
  
6、kubeadmのインストール(k8sクラスターのビルド)、kubelet(ポッドを実行)およびkubectl(クライアントがクラスターを処理するためのツール)

  1)yumソースを構成し、
  cat << EOF> /etc/yum.repos.d/kubernetes.repo
  [kubernetes]
  name = Kubernetes
  baseurl = http://mirrors.aliyun.com/kubernetes/yum/を3つで実行しますノードrepos / kubernetes-el7-x86_64
  enabled = 1
  gpgcheck = 0
  repo_gpgcheck = 0
  gpgkey =
         http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/ kubernetes /yum/doc/rpm-package-key.gpg
  EOF
  
  2)、kubeadm&kubelet&kubectlをインストールします:[yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0]

  3)、dockerとk8sは同じcgroup
    (1)を設定し、[vi /etc/docker/daemon.json]、/daemon.jsonファイルに追加します:["exec-opts":["native.cgroupdriver = systemd" ]、]
     [systemctl restart docker]
    
    (3)、#kubelet、ここに出力ディレクトリが存在しない場合は、問題がないことも意味します。誰でも続行できます
     [sed -i "s / cgroup-driver = systemd / cgroup-driver = cgroupfs / g "/etc/systemd/system/kubelet.service.d/10-kubeadm.conf](4
     
    )、インストールは成功し、ブート開始を設定します:[systemctl enable kubelet && systemctl kubeletを開始]

7.プロキシ/一時停止/スケジューラなどの国内ミラー

  1)kubeadmで使用されているミラーイメージを確認します:[kubeadm config images list]、内容は次のとおりです。7k8s.gcr.io/kube-apiserver:
    v1.14.0
    k8s.gcr.io/kube-controller-manager:v1 .14.0
    k8s .gcr.io / kube-scheduler:
    v1.14.0
    k8s.gcr.io/kube-proxy:v1.14.0
    k8s.gcr.io/pause:3.1
    k8s.gcr.io/etcd:3.3.10k8s。 gcr.io /coredns:1.3.1
    
  2)外部ミラーにアクセスできない問題を解決します
    (1)。kubeadm.shスクリプトを作成してミラーをプル/タグ付け/元のミラーを削除し、保存と変更のスクリプトを作成します各ノード:[Vi kubeadm.sh]の内容は次のとおりです
        #!/ bin / bash
        
        set -e
        
        KUBE_VERSION = v1.14.0
        KUBE_PAUSE_VERSION = 3.1
        ETCD_VERSION = 3.3.10
        CORE_DNS_VERSION = 1.3.1
        
        GCR_URL = k8s.gcr.io
        ALIYUN_URL = repository.cn-hangzhou.aliyuncs.com/google_containers
        
        images =(kube-proxy:$ {KUBE_VERSION} kube
        -scheduler:$ {KUBE_VERSION} kube
        -controller-manager:$ {KUBE_VERSION}
        kube-apiserver:$ {KUBE_VERSION}
        一時停止:$ {KUBE_PAUSE_VERSION}
        etcd:$ {ETCD_VERSION}
        coredns:$ {CORE_DNS_VERSION})
        
        for imageName in $ {images [@]}; do
          docker pull $ ALIYUN_URL / $ imageName docker
          tag $ ALIYUN_URL / $ imageName $ GCR_URL / $ imageName docker
          rmi $ ALIYUN_URL / $ imageName
        done
        
    (2)、运行脚本和查看镜像:【sh./kubeadm.sh】、【dockerimages 】

  3)これらの画像を自分の
    AlibabaCloudウェアハウスにプッシュします[オプション、実際の状況に応じて] [docker login --username = xxx Registry.cn-hangzhou.aliyuncs.com]、プッシュスクリプトは次のとおりです
    
    #!/ bin / bash
    
    set -e
    
    KUBE_VERSION = v1.14.0
    KUBE_PAUSE_VERSION = 3.1
    ETCD_VERSION = 3.3.10
    CORE_DNS_VERSION = 1.3.1
    GCR_URL = k8s.gcr.io
    ALIYUN_URL = repository.cn-hangzhou.aliyuncs.com/tiger2019
    images =(kube -proxy: $ {KUBE_VERSION}
    KUBE-スケジューラ:$ {KUBE_VERSION}
    KUBEコントローラマネージャ:$ {KUBE_VERSION}
    KUBE-apiserver:$ {KUBE_VERSION}
    休止:$ {KUBE_PAUSE_VERSIONは}
    etcd:$ {ETCD_VERSION}
    $ {CORE_DNS_VERSION}):coredns
    ために$ {images [@]}で;
        docker tag $ GCR_URL / $ imageName $ ALIYUN_URL / $ imageName docker
        push $ ALIYUN_URL / $ imageName docker
        rmi $ ALIYUN_URL / $ imageName
    done

    スクリプト[sh./kubeadm-push-aliyun.sh]を実行します

8. kubeinitはマスターを初期化します

  1)、kubeinitプロセス
  
    01-一連のチェックを実行してこのマシンがkubernetesをデプロイできることを確認します
    
    02-ディレクトリ
    / etc / kubernetes / pki / *
    
    03-に対応する外部にサービスを提供するためにkubernetesが必要とするさまざまな証明書を生成しますその他のコンポーネントの場合kubeへのアクセスに必要な構成ファイルを生成します-ApiServerls
        / etc / kubernetes /
        admin.conf controller-manager.conf kubelet.conf Scheduler.conf04-
        
    マスターコンポーネントのポッド構成ファイルを生成します。
        ls /etc/kubernetes/manifests/*.yaml kube
        -apiserver.yaml kube 
        -controller-manager.yaml     kube
        -scheduler.yaml
        
05-etcd PodYAMLファイルを生成します。
        ls /etc/kubernetes/manifests/*.yaml kube
        -apiserver.yaml kube 
        -controller-manager.yaml         kube
        -scheduler.yaml
etcd.yaml
        
    06-これらのYAMLファイルがkubeletによって監視される/ etc / kubernetes / manifests /ディレクトリに表示されると、kubeletはこれらのyamlファイル、つまりマスターコンポーネントのコンテナによって定義されたポッドを自動的に作成します。マスターコンテナが開始された後、kubeadmはマスターコンポーネントのヘルスステータスチェックURL localhost:6443 / healthzをチェックし、マスターコンポーネントが完全に機能するのを待ちます。07-
    
    クラスターのブートストラップトークンを生成します。08-
    
    追加ca.crtなどのマスターノードに関する重要な情報。ConfigMapを使用してetcdに保存し、その後のノードノードのデプロイに
    
    09を使用します。最後のステップはデフォルトのプラグインをインストールすることです。デフォルトでは、kube-proxyとDNS2プラグインをkubernetesにインストールする必要があります。

  2)、【kubeadm init --kubernetes-version = 1.14.0 --apiserver-advertise-address = 192.168.3.51 --pod-network-cidr = 10.244.0.0 / 16】
    1。执行到達信息
  あなたのKubernetesコントロールプレーン正常に初期化されました!
  
  クラスターの使用を開始するには、通常のユーザーとして次を実行する必要があります
  
    。mkdir-p $ HOME / .kube
    sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
    sudo chown $(id- u):$(id -g)$ HOME / .kube / configこれで
  
  、ポッドネットワークをクラスターにデプロイする必要があります。     https://kubernetes.io/docs/concepts/cluster-administration/addons/に
  リストされているオプションのいずれかを使用して、「kubectl apply -f [podnetwork] .yaml」を実行します

  
  次に、を実行して、任意の数のワーカーノードに参加できます。ルートとしてそれぞれに続く:
  
  kubeadm join 192.168.3.51:6443 --token fvxofu.fxdgrb9f6l5mvgmd \
      --discovery-token-ca-cert-hash sha256:db32c745032468fada5f50c218246951e098e3b09ef46696099a732d93cb92d5 

    
    2.ログプロンプトに従って実行します
      。mkdir-p$ HOME / .kube
      sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
      sudo chown $(id -u):$(id -g )$ HOME / .kube / config
      
    3.ポッドを確認し、しばらく待ちます。同時に、etcd、コントローラー、スケジューラーなどのコンポーネント
    
    がポッドの方法正常にインストールされていることを確認できます。4.kubeのポッドを確認します。 -system:[kubectl get pods -n kube- system -w]、注:corednsは開始されていません。
      すべてのポッド表示するには、ネットワークプラグインをインストールする必要があります:[kubectl get pods --all-namespaces]

    5.ヘルスチェック:[curl -k https:// localhost:6443 / healthz]

9.calicoネットワークプラグインをデプロイしてインストールします[https://kubernetes.io/docs/concepts/cluster-administration/addons/]

  1)、calicoネットワークプラグイン:[https://docs.projectcalico.org/v3.9/getting-started/kubernetes/]、
  
  calico 、マスターノードでも動作します2)、[kubectl apply -f https: // docs.projectcalico.org/v3.9/manifests/calico.yaml]
  
        手順は省略できます:
      [wget https://docs.projectcalico.org/v3.9/manifests/calico.yaml]
      使用されているミラーを表示します: [cat calico.yaml | grep画像]
      

  3)calicoが正常にインストールされているかどうかを確認します:[kubectl get pods --all-namespaces]、すべてのポッドを表示します
  
  4)、マスターノードクエリノード:[kubectl get node]

10. KUBEは、以下のように、woker01とworker02に以前に保護されたコマンドを実行し、参加
  参加192.168.3.51:6443 --token 9s9lxo.zeijg5g35x1aex7m \ [kubeadmを
    e7916a19e5c055acdf8f26aff67fb953dedf10d7258:--discoveryトークン-CA-CERT-ハッシュSHA256
  
  ノードを追加する場合783 )失敗した場合、または再度追加したい場合は、スレーブノードで次のコマンドを使用できます:[kubeadm reset]
  
11.マスターノードを再度確認します:[kubectl get nodes]、さらにノードがあることを確認しますこの時の情報

12、体验ポッド、定义pod.yml文件、比如pod_nginx_rs.yaml
cat> pod_nginx_rs.yaml << EOF
apiVersion:apps / v1
種類:ReplicaSet
メタデータ:
  名前:nginx
  ラベル:
    層:フロントエンド
仕様:
  レプリカ:3
  セレクター:
    matchLabels:
      層:フロントエンド
  テンプレート:
    メタデータ:
      名前:nginx
      ラベル:
        層:フロントエンド
    仕様:
      コンテナー:
      -名前:nginx
        イメージ:nginx
        ポート:-containerPort
        :80
EOF

13. pod_nginx_rs.ymlファイルに従ってポッドを作成します:[kubectl apply -f pod_nginx_rs.yaml]

14.ポッドの表示:
  [kubectl get pods]
  [kubectl get pods -o wide]、対応するノードに移動して確認および確認できます:
  [docker ps | grep nginx] [kubectl describe pod nginx]


  
  
 

おすすめ

転載: blog.csdn.net/qq_36336332/article/details/103654015