マイクロサービスとクラウドネイティブ: K8S クラスターの構築

時間とコストを節約するために、学習用途のみに使用し、2 台の仮想マシン上で K8S クラスターの構築を直接シミュレートします。

ピットを踏む

システム環境:CentOS-7-x86_64-Minimal-2009イメージ、便宜上rootアカウント直下で動作させますが、実際には行わない方が良いです。

基本的な準備

  1. ファイアウォールをオフにする
systemctl disable firewalld
systemctl stop firewalld
  1. セリナックスを閉じる
# 临时禁用selinux
setenforce 0

# 永久关闭selinux 
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  1. スワップを無効にする
# 临时关闭 Swap
swapoff -a

# 永久禁用 Swap
vi /etc/fstab
在swap分区这行前加 # 注释掉
#/dev/mapper/centos-swap swap
  1. リポジトリをセットアップする
# 安装 yum-utils 包, 并设置稳定存储库
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. Docker のインストールと構成
# 查看docker-ce支持版本
yum list docker-ce --showduplicates|sort -r

#查看docker-ce-cli版本
yum list docker-ce-cli --showduplicates|sort -r

# 指定版本号安装
#yum install -y docker-ce-24.0.4 docker-ce-cli-24.0.4 containerd.io

# 默认安装最新版本
yum install docker-ce docker-ce-cli containerd.io

# 启动 Docker
systemctl enable docker && systemctl start docker

# 查看版本
docker -v

# 配置国内镜像源,修改/新建 daemon.json
vi /etc/docker/daemon.json

# 在 daemon.json 中添加:
{
    
    
        "registry-mirrors": [
                "https://registry.docker-cn.com",
                "https://docker.mirrors.ustc.edu.cn",
                "http://hub-mirror.c.163.com",
                "https://cr.console.aliyun.com/"
        ]
}

# 重启 Docker
systemctl restart docker
  1. Docker Compose をインストールする
# 下载 Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 对二进制文件添加可执行权限
chmod +x /usr/local/bin/docker-compose

# 查看版本
docker-compose -v

GitHub のアドレスを使用するのが最善ですが、他のアドレスを使用すると
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose、次のエラーが発生する可能性があります。

/usr/local/bin/docker-compose: line 1: html: No such file or directory
/usr/local/bin/docker-compose: line 2: syntax error near unexpected token `<'
'usr/local/bin/docker-compose: line 2: `<head><title>502 Bad Gateway</title></head>

K8S クラスターを構築する

  1. K8Sソースを変更する
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

基本環境を構築したら、現在の仮想マシンをマスターホストとし、VMWareやVirtualBoxなどの仮想マシンプラットフォームのクローン作成機能を利用してワーカーホストのクローンを作成します(もちろん、クローン作成することもできます)複数のマシン)。なお、クローン作成後の複数のホストはIPが異なる必要があり、ソフトウェアごとに動作が異なるため、ここでは具体的な動作の説明を省略します。

  1. マスター側にkubeadm、kubectl、kubeletをインストールする
# 安装指定版本
# yum install -y kubeadm-1.21.3 kubelet-1.21.3 kubectl-1.21.3

# 默认安装
yum install -y kubectl kubeadm kubelet

# 启动 kubelet 服务
systemctl enable kubelet && systemctl start kubelet

# 查看版本
docker-compose version
  1. ワーカー側に kubeadm と kubelet をインストールする
# 安装
yum install -y kubeadm kubelet

# 启动 kubelet 服务
systemctl enable kubelet && systemctl start kubelet
  1. コンテナランタイムcontainerdを起動します。
# Master 端和 Worker 端都要操作
mv /etc/containerd/config.toml /etc/containerd/config.bak
containerd config default | sudo tee /etc/containerd/config.toml
systemctl restart containerd
  1. ホスト名を設定するには、マスターとワーカーの両方でホスト名を操作する必要があります
    • マスターノードの下で:
    # 编辑 hosts,添加各个节点的映射
    vi /etc/hosts
    
    # 我的 Master 主机 ip 为 192.168.65.130,Worker 主机 ip 为 192.168.65.132
    192.168.65.132 k8s-node1
    192.168.65.130 k8s-master
    
    # Master 节点
    hostnamectl --static set-hostname k8s-master
    
    # 立刻生效
    hostname $hostname
    
    • ワーカー ノードの下で次のようにします。
    vi /etc/hosts
    
    192.168.65.132 k8s-node1
    192.168.65.130 k8s-master
    
    # Worker 节点
    hostnamectl --static set-hostname k8s-node1
    
    # 立刻生效
    hostname $hostname
    
  2. マスターノードを初期化する
# 仅在 Master 主机上执行:
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.65.130 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl 0
  • –apiserver-advertise-address=192.168.65.130、マスター ホストの IP アドレス
  • –image-repository=registry.aliyuncs.com/google_containers、これはミラー アドレスです
  • –service-cidr=10.96.0.0/12、IP アドレスは 10.96.0.0/12 に直接適用されます。
  • –pod-network-cidr=10.244.0.0/16、K8S内のポッドノード間のネットワークで使用できるIPセグメントは変更可能であり、一時的に10.244.0.0/16を使用しても問題ありません

初期化が完了すると、結果は次のようになります。
ここに画像の説明を挿入
プロンプトされたコマンドをここに保存しますkubeadm join xxx。忘れた場合は、次のコマンドで確認できます。

kubeadm token create --print-join-command

実行を続けます:

mkdir -p ~/.kube
sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
  1. マスターノードにワーカーを追加
# Worker 端,使用上一步得到的 join 命令
kubeadm join 192.168.65.130:6443 --token 4olf44.2t6sqev73d6ewm48 --discovery-token-ca-cert-hash sha256:3603cf3bd9efa671e95a93f922f097580b1ffbfe3e55ca8b7f1876bf8fc4be69

成功後のプロンプトは次のとおりです。
ここに画像の説明を挿入
このステップではエラーが報告される場合があります。

[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

解決:

echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
  1. Calico ネットワーク プラグインをマスター側にインストールします
    。Calico のバージョンは kubelet のバージョンと一致する必要があることに注意してください。適応関係は、Calico の各バージョンの手順に記載されています。たとえば、私の kubelet は 1.21.3、このバージョンを満たす Calico のバージョンは 3.20 と 3.21 です: https
    ここに画像の説明を挿入
    : //docs.tigera.io/archive/v3.20/getting-started/kubernetes/requirements
# 下载 calico.yaml 到本地
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

# 执行
kubectl apply -f calico.yaml

ここに画像の説明を挿入
9. ノードとポッドのステータスを確認する

# 查看 nodes
kubelet get node

# 查看 pods
kubectl get pods -n kube-system -o wide

最初は、ノードは NotReady 状態にあります。
ここに画像の説明を挿入
関連する coredn も開始しています。
ここに画像の説明を挿入
一定時間が経過すると、すべてのポッドが開始 (実行) され、ノードが準備完了 (準備完了) していることがわかります。
ここに画像の説明を挿入

Supongo que te gusta

Origin blog.csdn.net/by6671715/article/details/131732459
Recomendado
Clasificación