k8s 学習メモ (1): k8s シングルマスター アーキテクチャの導入

記事ディレクトリ

k8s シングルマスターアーキテクチャのインストールと展開

環境整備

3 つの新しい centos7.9 システム、4 コア CPU、2G メモリ、200G ディスク

環境宣言

  • podSubnet (ポッド ネットワーク セグメント) 10.244.0.0/16
  • serviceSubnet (サービス ネットワーク セグメント): 10.96.0.0/16
  • 物理マシンのネットワークセグメント: 192.168.31.0/24

クラスタアーキテクチャ

K8S クラスターの役割 ip CPU名 コンポーネントのインストール
制御ノード 192.168.31.180 k8sマスター APIサーバー、コントロールマネージャー、スケジューラー、etcd、kube-proxy、docker、calico
作業ノード 192.168.31.181 k8s-ノード-1 kublet、kube-proxy、docker、calico、coredns
作業ノード 192.168.31.182 k8s-ノード-2 kublet、kube-proxy、docker、calico、coredns

インストール手順

1. k8s クラスターの実験環境を初期化してインストールします (3 台の k8 を動作させる必要があります。便宜上、1 台の動作のみを記録しました)

1. クラスタ アーキテクチャに従ってホスト IP とホスト名を構成します。

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static 
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.31.180
PREFIX=24
GATEWAY=192.168.31.1
DNS1=114.114.114.114
[root@localhost ~]# hostnamectl set-hostname k8s-master
[root@localhost ~]# su
[root@k8s-master ~]#

他の 2 台のマシンの構成も同様で、クラスター アーキテクチャに従って IP とホスト名を構成します。

2. すべてのノードでファイアウォールと selinux をオフにします。

[root@k8s-master ~]# service firewalld stop #临时关闭防火墙
Redirecting to /bin/systemctl stop firewalld.service
[root@k8s-master ~]# systemctl disable firewalld #永久关闭防火墙
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@k8s-master ~]# setenforce 0 #临时关闭selinux
[root@k8s-master ~]# getenforce 
Permissive
[root@k8s-master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  #永久关闭selinux

機能: k8s クラスターホスト間の通信がブロックされるのを防止します。

他の 2 台のマシンは同じように動作します

3. /etc/hosts ファイルを変更し、ホスト名を使用して相互にアクセスします。

すべてのノードの操作

[root@k8s-master ~]# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.180 k8s-master
192.168.31.181 k8s-node-1
192.168.31.182 k8s-node-2

4. すべてのノードが相互に秘密のないチャネルを確立します

k8sマスター

[root@k8s-master ~]# ssh-keygen
[root@k8s-master ~]# ssh-copy-id k8s-node-1
[root@k8s-master ~]# ssh-copy-id k8s-node-2

k8s-ノード-1

[root@k8s-node-1 ~]# ssh-keygen
[root@k8s-node-1 ~]# ssh-copy-id k8s-master
[root@k8s-node-1 ~]# ssh-copy-id k8s-node-2

k8s-ノード-2

[root@k8s-node-2 ~]# ssh-keygen
[root@k8s-node-2 ~]# ssh-copy-id k8s-master
[root@k8s-node-2 ~]# ssh-copy-id k8s-node-1

5. パフォーマンスを向上させるためにスワップ パーティションをオフにする

3つすべてを実行してください

[root@k8s-master ~]# swapoff -a

機能: 可能な限りメモリを使用し、ディスク スワップ パーティションを使用せず、パフォーマンスを向上させます。k8s の
設計時、パフォーマンスを向上させるために、デフォルトではスワップ パーティションの使用は許可されていませんKubeadm が初期化されると、スワップが閉じられているかどうかが検出されます。閉じられていない場合、初期化は失敗しますスワップ パーティションをオフにしたくない場合は、k8s のインストール時に –ignore-preflight-errors=Swap を指定すると問題を解決できます。

スワップパーティションを完全に閉じる

[root@k8s-master ~]# vim /etc/fstab

ここに画像の説明を挿入します

6. マシンのカーネルパラメータを変更する

3つすべてを実行してください

[root@k8s-master ~]# modprobe br_netfilter            #可以解决 sysctl -p /etc/sysctl.d/k8s.conf出现报错:
[root@k8s-master ~]# echo "modprobe br_netfilter" >> /etc/profile               #设置开机启动
[root@k8s-master ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> EOF
[root@k8s-master ~]# sysctl -p /etc/sysctl.d/k8s.conf                   #从指定的文件加载系统参数

7. Alibaba Cloud のリポジトリソースを構成する

[root@k8s-master ~]# yum install -y yum-utils
[root@k8s-master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

国内の Docker イメージ ソースを構成すると、後続のイメージのプルが大幅に高速化されます。

8. クラスターに必要なすべての依存関係パッケージをインストールします。

[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm

9. k8s コンポーネントのインストールに必要な Alibaba Cloud リポジトリ ソースを構成します

[root@k8s-master ~]# vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

10. 時刻同期の設定

ntpdateコマンドをインストールする

[root@k8s-master ~]# yum install -y ntpdate

ネットワーク時刻を同期する

[root@k8s-master ~]# ntpdate cn.pool.ntp.org

時刻同期をスケジュールされたタスクにする

[root@k8s-master ~]# crontab -e

* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org

crondサービスを再起動します

[root@k8s-master ~]# service crond restart

2. docker サービスをインストールします (3 つの k8s ホストすべてで動作します)。

1.docker-ceをインストールする

ドッカーをインストールする

[root@k8s-master ~]# yum install docker-ce-20.10.6 -y

自動起動+起動時に自動起動

[root@k8s-master ~]# systemctl start docker && systemctl enable docker.service

2. Docker イメージ アクセラレータとドライバーを構成する

イメージアクセラレータを追加する
[root@k8s-master ~]# vim /etc/docker/daemon.json

{
 "registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

docker ファイル ドライバーを systemd に変更します。デフォルトは cgroupfs です。Kubeletはデフォルトで systemd を使用します。この 2 つは一貫している必要があります

systemdを更新してdockerを再起動する
[root@k8s-master ~]# systemctl daemon-reload  && systemctl restart docker
Docker の実行ステータスを確認する
[root@k8s-master ~]# systemctl status docker

ここに画像の説明を挿入します

3. k8s の初期化に必要なソフトウェア パッケージをインストールします (3 つの k8s ホストすべてで動作します)。

1. kubeadm、kubelet、kubectlをインストールします

[root@k8s-master ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6

2. 起動後にkubeletを自動的に起動する

[root@k8s-master ~]# systemctl enable kubelet
ソフトウェア 効果
クビーズム kubeadm は、k8s クラスターを初期化するために使用されるツールです
キュベレット クラスター内のすべてのノードにインストールされ、ポッドの起動に使用されます
クベクトル kubectl を通じて、アプリケーションのデプロイと管理、さまざまなリソースの表示、さまざまなコンポーネントの作成、削除、更新を行うことができます。

4. オフライン イメージ パッケージをインポートして、後続のイメージの取得を高速化します

1. k8s クラスターの初期化に必要なオフライン イメージ パッケージを 3 つの k8s ホストにアップロードします。

画像圧縮パッケージは、xftp 経由で k8s ホストのホーム ディレクトリにアップロードされます。

[root@k8s-master ~]# ls
anaconda-ks.cfg  k8simage-1-20-6.tar.gz

他の 2 つのホストへの scp

[root@k8s-master ~]# scp k8simage-1-20-6.tar.gz 192.168.31.181:/root
[root@k8s-master ~]# scp k8simage-1-20-6.tar.gz 192.168.31.182:/root

2.dockerロードインポートイメージ

[root@k8s-master ~]# docker load -i k8simage-1-20-6.tar.gz

5. Kubeadm は k8s クラスターを初期化します (マスター上でのみ実行されます)。

1. kubeadm.yaml ファイルを生成する

[root@k8s-master ~]# kubeadm config print init-defaults > kubeadm.yaml

2. kubeadm.yaml ファイルの関連構成を変更します。

[root@k8s-master ~]# vim kubeadm.yaml 

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.31.180
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

ここに画像の説明を挿入します

特別な注意: –image-repository registry.aliyuncs.com/google_containers プルされたイメージが海外のサイトからプルされないようにするには、ウェアハウスのアドレスを registry.aliyuncs.com/google_containers として手動で指定します。kubeadm はデフォルトで k8s.gcr.io からイメージをプルします。オフライン イメージをローカルにインポートしたため、ローカル イメージが最初に使用されます。

mode: ipvs は、kube-proxy プロキシ モードが ipvs であることを示します。ipvs が指定されていない場合、デフォルトで iptables が使用されます。ただし、iptables は非効率であるため、運用環境では ipvs を有効にすることをお勧めします。

3. kubeadm.yaml ファイルに基づいて k8s を初期化します。

[root@k8s-master ~]# kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

ここに画像の説明を挿入します

4. kubectl 構成ファイル config を構成することは、kubectl コマンドがこの証明書を使用して k8s クラスターを管理できるように kubectl を認証することと同じです。

[root@k8s-master ~]#   mkdir -p $HOME/.kube
[root@k8s-master ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config

ノード情報の表示

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE    VERSION
k8s-master   NotReady   control-plane,master   177m   v1.20.6

他の 2 つのノードがまだマスターに参加していないため、マスターのみが存在することがわかりました。

6. k8s クラスターの拡張 - 2 つの稼働ノードを追加

マスター上のノードに参加するコマンドを確認します。

[root@k8s-master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.31.180:6443 --token bnokqt.324m0mxrhv7z7je3     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

ノード1ノードに参加

[root@k8s-node-1 ~]# kubeadm join 192.168.31.180:6443 --token abcdef.0123456789abcdef     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

ノード2ノードに参加

[root@k8s-node-2 ~]# kubeadm join 192.168.31.180:6443 --token abcdef.0123456789abcdef     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

マスター上のノード情報を表示する

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   3h4m    v1.20.6
k8s-node-1   NotReady   <none>                 5m4s    v1.20.6
k8s-node-2   NotReady   <none>                 4m55s   v1.20.6

無事に参加できました!

k8s-node-1 と k8s-node-2 のロールを仕事に変えることができます

[root@k8s-master ~]# kubectl label node k8s-node-1 node-role.kubernetes.io/worker=worke
node/k8s-node-1 labeled
[root@k8s-master ~]# kubectl label node k8s-node-2 node-role.kubernetes.io/worker=worke
node/k8s-node-2 labeled
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   3h10m   v1.20.6
k8s-node-1   NotReady   worker                 10m     v1.20.6
k8s-node-2   NotReady   worker                 10m     v1.20.6

7. Kubernetes ネットワーク コンポーネント - Calico をインストールします (マスター上で実行)

1. calico.yaml ファイルをホーム ディレクトリにアップロードします。

[root@k8s-master ~]# ls
anaconda-ks.cfg  calico.yaml  k8simage-1-20-6.tar.gz  kubeadm.yaml

2.calico ネットワーク プラグインをインストールするための yaml ファイル

[root@k8s-master ~]# kubectl apply -f  calico.yaml

3. ノードのステータスを確認する

[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   Ready    control-plane,master   3h16m   v1.20.6
k8s-node-1   Ready    worker                 16m     v1.20.6
k8s-node-2   Ready    worker                 16m     v1.20.6

ここに画像の説明を挿入します

ステータスが準備完了ステータスに変更されたことがわかります。おめでとうございます。k8s 1 つのマスターと 2 つのスレーブのアーキテクチャが正常に構築されました。

おすすめ

転載: blog.csdn.net/qq_57629230/article/details/131314823