0
0
0
0
专栏/.../

测试 k8s 安装

 WalterWj  发表于  2024-04-24

容器安装指南

本文档提供了在 Linux 系统上安装和配置容器运行时环境的步骤,包括网络配置、containerd 和 runc 的安装,以及 Kubernetes 集群的初始化和配置。

网络配置

首先加载必要的内核模块,并设置网络参数以符合 Kubernetes 的网络要求。

# 加载必要的内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 设置网络参数,确保它们在重启后依然有效
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# 立即应用网络参数设置
sudo sysctl --system

# 检查模块是否加载成功
lsmod | grep br_netfilter
lsmod | grep overlay

# 显示当前的网络参数设置
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

初始化系统

确保 IP 转发被启用,这对于网络功能是必要的。

# 编辑 sysctl 配置以启用 IP 转发
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
# 应用配置
sudo sysctl -p

安装 containerd

从 GitHub 下载并安装 containerd,包括配置其服务和参数。

# 下载 containerd
wget https://github.com/containerd/containerd/releases/download/v1.6.31/containerd-1.6.31-linux-amd64.tar.gz
# 解压到指定目录
tar -C /usr/local -xzvf containerd-1.6.31-linux-amd64.tar.gz

# 下载 systemd 服务文件
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
cp containerd.service /etc/systemd/system/containerd.service

# 编辑 containerd 的启动命令
vi /etc/systemd/system/containerd.service
ExecStart=/usr/local/bin/containerd --config=/etc/containerd/config.toml
# 修改下 limit
[Service]
LimitNOFILE=1048576
# 修改时区 +8
Environment=TZ=Asia/Shanghai

# 生成默认的 containerd 配置文件并进行个性化配置
containerd config default > config.toml
# 配置文件内容见下方
vi /etc/containerd/config.toml

# 创建配置目录并移动配置文件
mkdir /etc/containerd/
cp config.toml /etc/containerd/config.toml

$ cat /etc/containerd/config.toml
# 这是 containerd 的主配置文件

# root 是 containerd 存储其状态的目录
root = "/var/lib/containerd"
# state 是 containerd 存储运行状态的目录
state = "/run/containerd"

# containerd 的日志设置
[debug]
  # 开启详细调试日志
  level = "info"

# gRPC 服务配置
[grpc]
  # gRPC 服务监听地址
  address = "/var/run/containerd/containerd.sock"
  # gRPC 服务的 TCP 监听地址,留空表示不启用 TCP
  tcp_address = ""
  # gRPC 服务的 TLS 证书文件路径
  tcp_tls_cert = ""
  # gRPC 服务的 TLS 密钥文件路径
  tcp_tls_key = ""
  # gRPC 服务的 TLS CA 证书文件路径
  tcp_tls_ca = ""

# CRI 插件配置,用于 Kubernetes 集成
[plugins."io.containerd.grpc.v1.cri"]
  # 启用 CRI 插件
  sandbox_image = "k8s.gcr.io/pause:3.1"
  # 容器网络配置
  [plugins."io.containerd.grpc.v1.cri".cni]
    # CNI 配置文件的目录
    conf_dir = "/etc/cni/net.d"
    # CNI 插件的目录
    bin_dir = "/opt/cni/bin"

  # 容器运行时配置
  [plugins."io.containerd.grpc.v1.cri".containerd]
    # 默认使用 runc 作为容器运行时
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
      runtime_type = "io.containerd.runc.v2"

# 配置 limit
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
  SystemdCgroup = true
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options.linux]
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options.linux.rlimits]
      type = "nofile"
      hard = 1048576
      soft = 1048576

# 快照插件配置,使用 overlayfs 作为快照驱动
[plugins."io.containerd.snapshotter.v1.overlayfs"]
  # 快照的存储路径
  # root_path = "/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs"
  root_path = "/data/containerd/overlayfs"

# Metrics 统计信息的配置
[metrics]
  # Metrics 服务监听地址
  address = "127.0.0.1:1337"

# 超时设置
[timeouts]
  # 连接超时时间
  "io.containerd.timeout.shim.cleanup" = "5m"
  "io.containerd.timeout.shim.load" = "5m"
  "io.containerd.timeout.shim.shutdown" = "3m"
  "io.containerd.timeout.task.state" = "2s"

# 重新加载 systemd 管理器配置,启用并启动 containerd
systemctl daemon-reload
systemctl enable --now containerd

安装 runc

从 GitHub 下载并安装 runc。

# 下载 runc
wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64
# 安装 runc
install -m 755 runc.amd64 /usr/local/sbin/runc

安装 CNI 插件

下载并安装 CNI 插件,这对于 Kubernetes 中的网络功能是必要的。

# 下载 CNI 插件
wget https://github.com/containernetworking/plugins/releases/download/v1.4.1/cni-plugins-linux-amd64-v1.4.1.tgz
# 解压到指定目录
mkdir -p /opt/cni/bin
tar -C /opt/cni/bin -xzvf cni-plugins-linux-amd64-v1.4.1.tgz

最后,重启 containerd 服务并检查状态:

sudo systemctl restart containerd && sudo systemctl status containerd -l

Kubernetes 安装

安装工具

配置 Kubernetes 的 YUM 仓库,并安装 kubelet、kubeadm 和 kubectl。

# 配置 Kubernetes YUM 仓库
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/# Kubernetes 安装与集群初始化

本文档介绍如何在 Linux 系统上安装和配置 Kubernetes 集群,包括必要的工具和组件安装以及集群的初始化配置。

## 安装工具

配置 Kubernetes 的 YUM 仓库,并安装 kubelet、kubeadm 和 kubectl。

```bash
# 配置 Kubernetes YUM 仓库
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

# 安装 kubelet, kubeadm, kubectl
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 启用并启动 kubelet 服务
sudo systemctl enable --now kubelet

集群初始化

创建一个配置文件并进行初始化。

# 创建一个目录用于存放安装文件
mkdir k8sInstall
cd k8sInstall/
# 生成默认的初始化配置文件
kubeadm config print init-defaults > init.yml

# 修改 init.yml 文件,设置以下参数:
apiserver-advertise-address
ttl
token
dataDir
name
taints

## 添加管理配置:
controllerManager:
  extraArgs:
    allocate-node-cidrs: "true"  # 启用节点 CIDR 分配
    cluster-cidr: "10.244.0.0/16"  # 设置集群 CIDR 范围

执行集群初始化

# 使用配置文件初始化集群
kubeadm init --config ./init.yml

初始化输出信息

初始化成功后,将显示如下信息:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.16.201.18:6443 --token wjj212.wwwwasdqwe121231 \
    --discovery-token-ca-cert-hash sha256:2665954b615b46a2ef9aa742d6c34dfeda66240f053f28fc7588663318febde4

配置 Kubernetes 管理器

获取节点的 pod CIDR 范围:

# 获取指定节点的 pod CIDR 范围
$ kubectl get node vm172-16-201-18 -o jsonpath='{.spec.podCIDR}'
10.244.0.0/24

安装 flannel 网络插件

安装 flannel 来管理集群内部的网络。

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

安装完成后的状态

检查命名空间和资源的状态:

$ kubectl get ns
NAME              STATUS   AGE
default           Active   101s
kube-flannel      Active   8s
kube-node-lease   Active   101s
kube-public       Active   101s
kube-system       Active   101s

其他节点加入集群

其他节点加入集群的步骤,无需重新安装 flannel:

# 查看集群节点状态
$ kubectl get nodes
NAME               STATUS   ROLES           AGE   VERSION
vm172-16-201-18    Ready    control-plane   12h   v1.29.3
vm172-16-201-193   Ready    <none>          12h   v1.29.3
vm172-16-201-226   Ready    <none>          11h   v1.29.3

去掉主节点的污点,让 pod 可以迁移到这个节点上:

kubectl taint nodes vm172-16-201-18 node-role.kubernetes.io/master:NoSchedule-

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论