Kubernetes の実験環境を素早く構築するにはどうすればよいでしょうか?

Kubernetes の実験環境を素早く構築するにはどうすればよいでしょうか?

[[411640]]

Kubernetesを学びたい多くの友人がこれらの問題に遭遇するでしょう

  • 利用可能なサーバーがありません
  • Kubernetes の公式ドキュメントを開いてみたところ、複雑なコンポーネントを学習できないことがわかりました。

今日はKubernetesで遊ぶためのお金と時間を節約する方法を紹介します

サーバーを準備する

多くの友人は高度なコンピュータ構成を持っているため、仮想マシンを直接使用して 2 台のマシンを開くことができます。少なくともコンピュータに 16G 以上のメモリがあることを確認してください。

私は8Gのメモリを搭載した小さなラップトップを使用している貧乏人です。クラウドサーバーを選択するしかない

Alibaba Cloud プラットフォームで 100 元をチャージし、従量課金制を選択すると、1 時間あたり 0.03 元で 2c4G のバースト パフォーマンス インスタンスを利用できます。一晩プレイするのにかかる費用は、レッドブル 1 缶分だけです。

サーバーが起動したら、Kubernetes のデプロイを開始できます。この記事ではkubeadmを使用してKubernetesクラスターを素早く構築します

システムパラメータを変更する

  • br_netfilter モジュールをロードしています
  1. br_netfilterがロードされているかどうかを確認します
  2. lsmod | grep br_netfilter
  3. br_netfilter をロードする
  4. modprobe br_netfilter
  5. またはモジュールロードファイルを変更する
  6. 猫 <<EOF | sudo tee /etc/modules- .d/k8s.confをロードします
  7. br_netfilter
  8. 終了
  • iptablesを有効にしてブリッジトラフィックをチェックする
  1. 猫 <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  2. net.bridge.bridge-nf-call-ip6tables = 1
  3. net.bridge.bridge-nf-call-iptables = 1
  4. 終了
  5. sudo sysctl --system  
  • スワップを無効にする
  1. スワップオフ -a
  • ファイアウォールと selinux を無効にする
  1. systemctl は、firewalld を停止し、systemctl は、firewalld を無効にします。
  2. 強制0を設定する
  3. sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  • ホスト名の設定
  1. マスター: hostnamectl set -hostname k8s-master
  2. ノード: hostnamectl set -hostname k8s-node01
  • ホストを追加
  1. cat >> /etc/hosts << EOF
  2. 192.168.4.34 k8sマスター
  3. 192.168.4.35 k8s-ノード01
  4. 終了
  • クロック同期を設定するには、ntpdate または chronyd を使用します。
  1. yum -y epel-release chrony をインストール && systemctl chronyd を有効にし && systemctl chronyd を開始します

Dockerをインストールする

  1. # docker-ceのyumソースを設定する
  2. https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo を実行します。
  3. # docker-ce をインストールする
  4. yum -y で docker-ce をインストールします
  5. # システムを自動的に起動するように設定し、Dockerを起動します
  6. systemctl で docker を有効にする && systemctl で docker を起動する
  7. # dockerのバージョンを確認する
  8. docker バージョン

kubernetesのyumソースを設定する

  1. cat > /etc/yum.repos.d/kubernetes.repo << EOF
  2. [Kubernetes]
  3. 名前= Kubernetes
  4. ベースURL=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  5. 有効=1
  6. gpgcheck=0
  7. リポジトリ_gpgcheck=0
  8. gpgkey = https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  9. 終了

kubeadm、kubelet、kubectlをインストールする

  1. yum -y kubeadm kubelet kubectl をインストールします
  2. systemctl kubelet を有効にする

Kubelet は、Docker などのコンテナ ランタイムを操作するために使用される Kubernetes プロジェクトのコア コンポーネントです。すべてのノードに存在します。 kubelet は、コンテナ ランタイムの処理に加えて、コンテナ ネットワークを構成したり、コンテナ データ ボリュームを管理したりするときに、ホスト マシンを直接操作する必要もあります。

kubelet 自体がコンテナ内で動作している場合、ホストを直接操作するのは非常に面倒になります。したがって、この問題を解決するために、kubeadm は kubelet をホストに直接デプロイし、コンテナを使用して他のコンポーネントをデプロイすることを選択します。

Kubernetesマスターをデプロイする

  1. kubeadm 初期化 \
  2. --apiserver-advertise-address=172.22.29.78 \  
  3. --イメージリポジトリ registry.aliyuncs.com/google_containers \  
  4. --kubernetes-バージョン v1.21.2 \  
  5. --service-cidr=10.1.0.0/16 \  
  6. --pod-network-cidr=10.244.0.0/16  

coredns:v1.8.0 が存在しないというメッセージが表示されます。解決:

  1. # Dockerアクセラレータを追加する
  2. tee /etc/docker/daemon.json <<- 'EOF'  
  3. {
  4. "レジストリミラー" : [ "https://fl791z1h.mirror.aliyuncs.com" ]
  5. }
  6. 終了
  7. systemctlデーモンリロード
  8. systemctl dockerを再起動します
  9. # coredns イメージを手動でダウンロードする
  10. docker pull coredns/coredns:1.8.0 を実行します。
  11. # 画像タグを変更する
  12. docker タグ coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns:v1.8.0

その後再初期化

最後に生成された参加部分は、ノードがクラスターに参加するためのコマンドです。

  • 指示に従ってkubectlを作成します
  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • kubectl の自動補完を設定する
  1. ソース <(kubectl 補完 bash)

デフォルトのトークンの有効期間は 24 時間です。有効期限が過ぎるとトークンは利用できなくなります。後でノードが追加された場合の解決策は、トークンを再生成することです。

  1. kubeadm トークン作成 
  • トークンを表示
  1. kubeadm トークン リスト

  • ポッドを表示
  1. kubectl ポッドを取得--all-namespaces  

coredns ポッドが開始されておらず、保留状態になっていることがわかります。ノードは NotReady であり、ネットワーク ポッドがありません。

ノードがクラスターに参加する

  1. kubeadmに参加172.22.29.78:6443 --token gtj686.cu5kxoxbgq8iha4m \  
  2. --discovery-token-ca-cert-hash sha256:e6aa8e197b74a08d9bae4b5d72854a49980539bc504691440fe5d716a3d299d9  

ノードを表示

ネットワークをインストールし、ここでcalicoを選択します

  1. kubectl を適用 -f https://docs.projectcalico.org/manifests/calico.yaml

インストール後にポッドの状態を確認する

イメージのダウンロードから初期化、実行状態まで

カリコネットワークをインストールすると、ポッドの1つが常にimagepullbackoff状態になります。

その後、ノードがイメージ ウェアハウスの高速化処理を実行しなかったためにイメージのダウンロードに失敗し、ポッドのステータスが imagepullbackoff 状態のままになっていることが判明しました。

設定が完了すると、Pod は自動的にイメージをダウンロードし、すべての Pod が実行状態になります。

ノードの画像を表示する

この時点でKubernetesクラスタがデプロイされます

Kubernetes のテスト

クラスター内にポッドを作成し、ポートを公開して、正常にアクセスできるかどうかを確認します。

  1. # nginxデプロイメントを作成する
  2. kubectlデプロイメント nginxを作成します--image=nginx  
  3. # 外部に公開されたポート
  4. kubectl 公開デプロイメント nginx --port=80 --type=NodePort  
  5. # ポッドとサービスを表示
  6. kubectl ポッド、サービスを取得します

nginxポッドがホストポート30830にマッピングされていることがわかります。セキュリティグループとファイアウォールを開いた状態でアクセスしてみてください。

ダッシュボードを展開する

  1. # ダッシュボードレイアウトファイルをダウンロード
  2. https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml を取得します。
  3. # このオーケストレーションファイルを使用してポッドを作成します
  4. kubectl create -f 推奨.yaml
  5. # 作成されたポッドとサービスを表示する
  6. kubectl get pod,svc -n kubernetes-dashboard

ここでは、recommended.yaml で、kubernetes-dashboard のポート タイプを nodeport に変更し、30000 を外部に公開します。

アクセスプロンプトには 2 つのログイン方法があります。ここで、トークンを使用してログインします。

  1. # トークンを取得する
  2. kubectl シークレットの説明 -n kubernetes-dashboard

トークンをコピーしてログインする

権限がないと表示されるので、再度作成してください。

  1. # saを作成し、cluster-admin権限をバインドする
  2. APIバージョン: v1
  3. 種類: サービスアカウント
  4. メタデータ:
  5. 名前: ダッシュボード管理者
  6. 名前空間: kube-system
  7. ---  
  8. 種類: ClusterRoleBinding
  9. apiバージョン: rbac。認証.k8s.io/v1beta1
  10. メタデータ:
  11. 名前: ダッシュボード管理者
  12. 科目:
  13. - 種類: サービスアカウント
  14. 名前: ダッシュボード管理者
  15. 名前空間: kube-system
  16. ロールリファレンス:
  17. 種類: ClusterRole
  18. 名前: クラスター管理者
  19. apiGroup : rbac.authorization.k8s.io
  20.  
  21. # 上記のオーケストレーションファイルをk8s-admin.yamlとして保存し、
  22. kubectl作成-f k8s-admin.yaml

トークンを再度取得して再度ログインしてください

  1. kubectl シークレットの説明 -n kube-system

ユーザーを作成するときに誤解が生じます。最初は、kubernetes-dashboard の名前空間内に作成されました。実際、この名前空間には権限がないため、これによって作成されたユーザーのトークンはコンテンツを取得できません。

yaml を修正して sa を再作成した後、kube-system で dashboard-admin ユーザーのトークンを見つけて再度ログインしました。すべて大丈夫でした。

<<:  ZooKeeper 分散ロック キュレーター ソース コード 05: 分散読み取り書き込みロックとインターロック

>>:  データ駆動型の世界でイノベーションを起こすにはなぜエッジコンピューティングが必要なのでしょうか?

推薦する

通信の制限がなく、承認の遅れもない:深セン大学インテリジェンスはファーウェイクラウドWeLink+OAを通じてオフィス業務を加速

浙江神達智能集団は、スマート観光産業チェーン全体に対する製品革新、産業計画、運用サービスの提供に注力...

オンラインストアのソフトマーケティングの実施方法を分析する

ネットショップ業界の競争が今とても激しいのは明らかです。義烏は我が国の小商品卸売都市として、我が国の...

#黒5# Virpus: シアトル VPS、全品 30% オフ、ハイエンド Xen、超低価格プロモーション

10年以上運営されているVirpusは、昨年のブラックフライデーのプロモーションで、Xen仮想化、1...

ウェブサイトのコンテンツタイトルを最適化するのは得意ですか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています魚が水から...

華雲データ西北本部が西県新区に上陸し、国家クラウドコンピューティング研究所を建設

[[429612]] 2021年10月15日、華雲データと陝西省西県新区開発建設管理委員会は、「秦創...

ウェブサイトの事例分析: データに語らせる方法

編集者: S++ チーム多くのウェブサイトでは、データは製品やデザインの品質を測定するための基本的な...

【最新版】超高速香港VPS推奨、超低遅延、大帯域幅、3つのネットワーク直接接続

香港の VPS を購入するには、高速なアクセス速度だけが必要で、登録は必要ありません。高速な香港 V...

これは「興味深い」挑戦です

クラウド ネイティブ開発では、アプリケーションをどこで実行するかではなく、どのように開発するかが重要...

CDN からエッジ コンピューティングまで、どちらが水に近いでしょうか?

CDN が誕生して以来、従来の CDN、クラウド CDN、共有 CDN の 3 世代が存在しましたが...

Suningがインターネット企業になることに対する自信と確信は何ですか?

最近、蘇寧は改めて自社の立場を表明し、自社はいわゆる伝統的なチャネル商人でも、厳密な意味での電子商取...

銀行振込の失敗から分散取引まで: 要約と考察

文章この問題について考え始めた当初の目的は、ある時友人に送金したのですが、私のお金が差し引かれてしま...

DEDEcms 究極の SEO 最適化チュートリアル

DEDEcms は中国のオープンソース CMS プログラムです。現在、ウェブサイトの構築に dede...

A5マーケティング:現段階での企業ウェブサイトの外部リンク構築の2つの異なる方法の簡単な分析

最近、筆者は他業種のウェブマスターとコミュニケーションを取っています。コミュニケーションの過程で、企...

パキスタン VPS: nexus.pk、月額 22 ドルから、2G メモリ/1 コア/40g SSD/200G トラフィック/1Gbps 帯域幅

2006 年に設立されたパキスタンのサーバー販売業者である nexus.pk は、ドメイン名登録、仮...