====== 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]