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: 分散読み取り書き込みロックとインターロック

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

推薦する

国家ラジオ映画テレビ総局は、違法ビデオソフトウェア81件を発表した。

微博TV Eyeの公認メディア関係者によると、中国サイバースペース管理局と国家ラジオ映画テレビ総局は...

分散Redisディープアドベンチャー-Sentinel

1 つのマスターと 1 つのスレーブ、または 1 つのマスターと複数のスレーブの構造では、マスター ...

プライベートクラウドとは何ですか?プライベートクラウドに関する誤解を払拭する必要がある

プライベート クラウドは、標準化団体とクラウド コンピューティング業界によって合意された明確に定義さ...

ウェブサイトのキーワードがBaiduの2ページ目に長期間ランクインしている理由

私は毎日オリジナルコンテンツを更新し、毎日友好的なリンクを交換し、毎日外部リンクを投稿し続けました。...

54,000個のスター!強力で便利な分散型リアルタイム監視システム!

導入Netdata の分散リアルタイム監視エージェントは、システム、ハードウェア、コンテナ、アプリケ...

エッジ コンピューティング/フォグ コンピューティングとそれが CDN プロバイダーにとって何を意味するのか?

CDN は通常、複数の地域にある複数のデータセンターにインターネット上で展開される大規模な分散システ...

話し合い: 年齢を重ねるほど SEO の価値が高まるというのは本当ですか?

今日、「年齢を重ねるほどSEOとしての価値が高まる」という話題が突然出てきて、私は深く考え込んでしま...

CIMC Vehicles: SAP と提携してハイエンドの製造システムを構築

2002 年に設立された CIMC Vehicles は、セミトレーラーおよび特殊車両の世界有数の高...

Ramhost Atlanta KVM 5倍

ramhost.us は小規模な個人向け VPS ビジネスで、社長は典型的なオタクです。今回、アトラ...

推奨: HostUS-Singapore/softlayer/$3.75/512m メモリ/15g SSD/750g トラフィック/G ポート

6か月後(2017年7月28日、hostus.usの公式連絡先は、hostusが立ち上げた香港データ...

ウェブサイトをGoogleに素早く掲載する最良の方法

しばらく作業した後、Web サイトが構築されます。新しい Web サイトの所有者として最初に考えるこ...

SAPはエクスペリエンス管理でインテリジェントエンタープライズの構築への道を切り開きます

SAP は、オーランドで開催された第 30 回 SAPPHIRE NOW® イベントで、消費者と企業...

「オープンソース」を夢見ているのは誰でしょうか?

まず最初に、少し前に起こった出来事をお話ししましょう。 2か月以上前、Appleの世界開発者会議が米...

オンライン教育プラットフォームモデル:Fanbi.comが崩壊、「はしご」は再び立ち上がれるか?

インターネットの発展により、人々はプラットフォームモデルの威力を実感するようになった。今年特に活況を...