写点什么

测试 k8s 安装

  • 2024-04-26
    北京
  • 本文字数:4050 字

    阅读完需:约 13 分钟

作者: WalterWj 原文来源:https://tidb.net/blog/8ce64b10

容器安装指南

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

网络配置

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


# 加载必要的内核模块cat <<EOF | sudo tee /etc/modules-load.d/k8s.confoverlaybr_netfilterEOF
sudo modprobe overlaysudo modprobe br_netfilter
# 设置网络参数,确保它们在重启后依然有效cat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1EOF
# 立即应用网络参数设置sudo sysctl --system
# 检查模块是否加载成功lsmod | grep br_netfilterlsmod | 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.confnet.ipv4.ip_forward = 1# 应用配置sudo sysctl -p
复制代码

安装 containerd

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


# 下载 containerdwget 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.servicecp containerd.service /etc/systemd/system/containerd.service
# 编辑 containerd 的启动命令vi /etc/systemd/system/containerd.serviceExecStart=/usr/local/bin/containerd --config=/etc/containerd/config.toml# 修改下 limit[Service]LimitNOFILE=1048576# 修改时区 +8Environment=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 管理器配置,启用并启动 containerdsystemctl daemon-reloadsystemctl enable --now containerd
复制代码

安装 runc

从 GitHub 下载并安装 runc。


# 下载 runcwget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64# 安装 runcinstall -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/bintar -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=Kubernetesbaseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/enabled=1gpgcheck=1gpgkey=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=Kubernetesbaseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/enabled=1gpgcheck=1gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.keyexclude=kubelet kubeadm kubectl cri-tools kubernetes-cniEOF
# 安装 kubelet, kubeadm, kubectlsudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes# 启用并启动 kubelet 服务sudo systemctl enable --now kubelet
复制代码

集群初始化

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


# 创建一个目录用于存放安装文件mkdir k8sInstallcd k8sInstall/# 生成默认的初始化配置文件kubeadm config print init-defaults > init.yml
# 修改 init.yml 文件,设置以下参数:apiserver-advertise-addressttltokendataDirnametaints
## 添加管理配置: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 nsNAME              STATUS   AGEdefault           Active   101skube-flannel      Active   8skube-node-lease   Active   101skube-public       Active   101skube-system       Active   101s
复制代码

其他节点加入集群

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


# 查看集群节点状态$ kubectl get nodesNAME               STATUS   ROLES           AGE   VERSIONvm172-16-201-18    Ready    control-plane   12h   v1.29.3vm172-16-201-193   Ready    <none>          12h   v1.29.3vm172-16-201-226   Ready    <none>          11h   v1.29.3
复制代码


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


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


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
测试 k8s 安装_管理与运维_TiDB 社区干货传送门_InfoQ写作社区