Ubuntu18でk8sクラスターを構築し、シンプルなアプリケーションnigx 2019/10/9をデプロイする

ローカル仮想マシン上に3つのノードが構築され、すべてUbuntuで動作しています。主に自己記録と後で使用するために便利です。
利用可能なプロテスト

ビルド環境を初期化してマスターノードを初期化し、クラスターに他のノードを追加 *****
マスターノードと他のノードでdockerとk8sを構成しますが、マスターノードを初期化し、ネットワークプラグインを追加する必要があります。
最初に、ファイアウォールをオフにし、スワップをオフにし、selinuxと他の準備をオフにする必要があります。

1:ファイアウォール
sudo ufw disableをオフにする

2:スワップを閉じる

 sudo swapoff -a     #这个只是暂时关闭,重启后失效
 sudo vim /etc/fstab   #通过修改配置文件,彻底关闭
# 注释掉swapfile这一行

3:selinuxを閉じる

 sudo vim /etc/selinux/config   #通过修改配置文件
 SELINUX=disabled

4:ホスト名を認識される名前に変更します。コマンドラインまたは自分で設定できます。オプション。

5:vim、curlなどの基本的なツールをインストールします。

sudo apt update && \
sudo apt -y upgrade && \
sudo apt install -y vim \
curl \
apt-transport-https \
ca-certificates \
software-properties-common

6:DNSサービスを暫定的に変更します。当面はこれを設定しないでください

$ sudo apt install -y unbound
$ sudo systemctl stop systemd-resolved
$ sudo systemctl disable systemd-resolved
$ sudo rm -rf /etc/resolv.conf
$ sudo vim /etc/NetworkManager/NetworkManager.conf
 # 在[main]下面添加
 dns=unbound
# 重启生效
$ reboot

7:これを一時的に設定しないようにパケット転送を構成します

sudo vim /etc/sysctl.conf    #修改配置文件,往文件中添加东西
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

構成を有効にするが、再起動後は無効にする

sudo modprobe br_netfilter
 sudo sysctl -p

起動時に自動的にbr_netfilterをロードするように設定

 sudo vim /etc/init.d/load_br_netfilter.sh
  #!/bin/bash
  ### BEGIN INIT INFO
  # Provides:       svnd.sh
  # Required-Start: $local_fs $remote_fs $network $syslog
  # Required-Stop:  $local_fs $remote_fs $network $syslog
  # Default-Start:  2 3 4 5
  # Default-Stop:   0 1 6
  # Short-Description: starts the svnd.sh daemon
  # Description:       starts svnd.sh using start-stop-daemon
  ### END INIT INFO
  sudo modprobe br_netfilter

 sudo chmod 775 /etc/init.d/load_br_netfilter.sh
 sudo update-rc.d load_br_netfilter.sh defaults 90

ブートをキャンセルする場合は、モジュールを自動的にロードします

$ sudo update-rc.d -f load_br_netfilter.sh remove

最初のステップ:Dockerを最初にインストールする
1:存在する可能性のある古いバージョンを最初にアンインストールする

 sudo apt-get remove docker docker-engine docker-ce docker.io

2:aptパッケージインデックスを更新します。

sudo apt-get update

3:aptがHTTPS経由でリポジトリを使用できるように、次のパッケージをインストールします

 sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

4:公式のDocker GPGキーを追加します。

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

5:次のコマンドを使用して、安定したリポジトリを設定します。

 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

6:aptパッケージインデックスを更新します。

 sudo apt-get update

7:利用可能なバージョンのリスト:

 apt-cache madison docker-ce

8:指定されたバージョンをインストールします

sudo apt-get install docker-ce=18.06.3~ce~3-0~ubuntu

9:Dockerステータスが開始されているかどうかを確認する

systemctl status docker

開始されていない場合は、開始します

sudo systemctl start docker

ドッカーを停止

sudo systemctl stop docker 

Dockerが自動的に起動するように設定する

systemctl enable docker.service

10:正常であることを確認します

sudo docker run hello-world

ステップ2:k8s環境を構築する
1:ソースを構成する

 sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
 sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF

インデックスを更新

$ sudo apt update

利用可能なバージョンを表示

apt-cache madison kubeadm

2:指定されたバージョンをインストールする

sudo apt install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
sudo apt-mark hold kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00

3:自動的に起動するようにブートを設定する

sudo systemctl enable kubelet && sudo systemctl start kubelet

4:マスターノードを初期化する

これは使用できます

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.0 --pod-network-cidr=10.244.0.0/16

そうでない場合は、これを試してください

kubeadm init --kubernetes-version=1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

5:トークン情報を再生成します。これは通常、12時間後に期限切れになる必要があるときに実行されます。

kubeadm token create --print-join-command

6:CNIフランネルネットワークプラグインをインストールします。ネットワークプラグインをインストールしない場合、マスターノードのステータスはNoReadyです。
ネットワークプラグインをインストールする前に、それを設定する必要があります。それ以外の場合、次のように報告されます:サーバーlocalhost:8080への接続が拒否されました

 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config

この操作が実行されない場合、kubectl getノードもエラーを報告します

これは使用できます

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

使えない場合は、こちらをお試しください

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

これまでのところ、k8s環境は基本的にセットアップされており、マスターノードも初期化されています。次のステップは、他のノードをクラスターに参加させることです。

ノードが再起動したら、必ずスワップを閉じ、resetコマンドを実行してから、結合クラスターに移動してください。

7:マスターノードによって生成されたトークンコマンドを他のノードで実行します。

ここで注意する必要があります。マスターノードに加えて、dockerとkubectl、kubeadm、kubeletをインストールする必要があります。他のノードもインストールする必要があり、同じようにインストールする必要があります。
例:これを他のノードで実行します

kubeadm join 192.168.172.134:6443 --token 1ly6ta.omqv3bkurfomxw0j     --discovery-token-ca-cert-hash sha256:d65642726224dfdf52ccd8af1e9fc1ca30ad201e4b03a14ebd327d7f60abf1c8

8:以前にクラスターに参加したノード。後でクラスターに再参加する場合は、
kubeadm resetコマンドを実行する必要があります。そうしないと、エラーが発生します。

注:いくつかの一般的なエラーと解決策を覚えておいてください。エラーを報告する場合は、コンソールから報告されたエラーの読み方を学ぶ必要があります。
1)新しく追加されたノードのステータスはNotReadyです。解決策は
、各ノードノードのデーモン、Docker、およびkuberletを再起動します。

 systemctl daemon-reload
 systemctl restart docker
 systemctl restart kubelet

最後の実行

kubeadm reset

最後に、クラスター
再び参加して解決します!

2)k8sはノードを削除します

kubectl delete node nodename

実際、このコマンドは汎用的であり、任意のタイプを削除できます。

kubectl delete type typename

typeは、ノード、ポッド、rs、rc、デプロイメント、サービスなどのリソースタイプです。typenameは、このリソースの名前です。

注:将来どのノードであっても、再起動されている限り、マスターはdockerとkubeletのステータスが正常かどうかを確認し、kubectl get nodesを実行し
てノード情報表示します。他のノードは、Dockerが正常かどうかを確認します。次に、問題が発生した場合、クラスターに再参加するには、最初にリセットする必要があります。kubeadmreset

Ubuntuでは、ターミナルを介して構成ファイルを変更するために一般的に使用されるいくつかの操作:
1:vimコマンドを使用して構成ファイルを入力します。保存して終了する場合は、esc、wq、保存して終了します。
2:設定で中国語、時間、ロック画面なしを設定します。

クラスターにシンプルなアプリケーションをデプロイする ******
nigxのシンプルなデプロイメント
1:マスターノードにデプロイメントを作成する

kubectl create deployment nginx --image=nginx

見る

kubectl get deployments

2:サービスを作成する

kubectl create service nodeport nginx --tcp 80:80

見る

kubectl get svc

3:スレーブノードで次のコマンドを実行して、nginxが正常にデプロイされているかどうかを確認します。
curl localhost:30601
#ここでのポート番号は、展開後の実際のポート番号によって異なります

または
curl kube-slave:30601
#ここでkube-slaveはノードのホスト名で、node1、node2 ...

ブラウザを開いて、次のように入力します。localhost:ポート番号またはノードホスト名:ポート番号。通常、nigxページにアクセスします。

13件の元の記事を公開 Like1 Visit 2006

おすすめ

転載: blog.csdn.net/qq_31152023/article/details/102455601