前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes kubeadm在Linux下的安装

Kubernetes kubeadm在Linux下的安装

作者头像
授客
发布2021-09-08 15:18:53
1.5K0
发布2021-09-08 15:18:53
举报
文章被收录于专栏:授客的专栏授客的专栏

实践环境

CentOS-7-x86_64-DVD-1810

开始之前

确保每台机器2G内存或以上

确保每台机器双核CPU或以上

确保所有机器网络互连

确认每个结点(node)的hostnameMACproduct_uuid唯一,Kubernetes用这些数值唯一确定集群中的结点

禁用Swap,以便kubelet正常工作

检查网络适配器

如果拥有多个网络适配器,无法通过默认路由访问Kubernetes组件,推荐给指定适配器添加到Kubernetes集群IP路由。

确保桥接通信(bridged traffic)对iptables可见

确保br_netfilter模块已加载,可通过执行``lsmod | grep br_netfilter查看是否已加载,如果没有,可通过执行命令sudo modprobe br_netfilter`加载

检查必备端口

确保以下必备端口未被占用

Control-plane node(s)

Protocol

Direction

Port Range

Purpose

Used By

TCP

Inbound

6443*

Kubernetes API server

All

TCP

Inbound

2379-2380

etcd server client API

kube-apiserver, etcd

TCP

Inbound

10250

kubelet API

Self, Control plane

TCP

Inbound

10251

kube-scheduler

Self

TCP

Inbound

10252

kube-controller-manager

Self

Worker node(s)

Protocol

Direction

Port Range

Purpose

Used By

TCP

Inbound

10250

kubelet API

Self, Control plane

TCP

Inbound

30000-32767

NodePort Services†

All

禁用Swap

临时禁用

代码语言:javascript
复制
# swapoff -a

避免重启机器后失效,编辑etc/fstab,注释掉swap所在记录行

代码语言:javascript
复制
# vi /etc/fstab

#UUID=2a2ac056-92c2-4cb9-9525-0291498f3d62 swap                    swap    defaults        0 0

如果不禁用,运行kubeadm时,会提示如下错误

代码语言:javascript
复制
[ERROR Swap]: running with swap on is not supported. Please disable swap

安装运行时

Kubernetes使用容器运行时Pod中运行容器。Linux结点,Kubernetes使用CRI(Container Runtime Interface )同所选择的的容器运行时交互。

如果不指定运行时,kubeadm通过扫描熟知的Unix域名socket列表自动检测已安装容器运行时

以下列出了容器运行时及关联的的socket路径

代码语言:javascript
复制
Docker	/var/run/dockershim.sock
containerd	/run/containerd/containerd.sock
CRI-O	/var/run/crio/crio.sock

如果检测到Dockercontainerd同时存在,则优先使用containerd。除此之外,如果还存在其它运行时,则kebeadm会报错。

kubelet通过dockershim CRI实现Docker的集成

这里选择安装 Docker 19.03.9,安装过程略

安装kubeadm, kubeletkubectl

kubeadm: 提供引导集群命令

kubelet: 提供在集群中运行所有机器组件的能力,以及其它事情,比如启动pod和容器

kubectl: 提供同集群交互的命令行工具

安装CNI插件(为大多数pod网络所需)

代码语言:javascript
复制
CNI_VERSION="v0.8.2"
sudo mkdir -p /opt/cni/bin
curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz

定义用于存放命令文件的目录

代码语言:javascript
复制
DOWNLOAD_DIR=/usr/local/bin
sudo mkdir -p $DOWNLOAD_DIR

注意:DOWNLOAD_DIR目录必须可写

安装crictl(为kubeadm/Kubelet CRI)所需)

代码语言:javascript
复制
CRICTL_VERSION="v1.17.0"
curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz

安装kubeadm, kubeletkubectl并添加kubelet系统服务

代码语言:javascript
复制
RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
cd $DOWNLOAD_DIR
sudo curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/{kubeadm,kubelet,kubectl}
sudo chmod +x {kubeadm,kubelet,kubectl}

RELEASE_VERSION="v0.4.0"
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service
sudo mkdir -p /etc/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

设置允许开机启动kubelet,并立即启动

代码语言:javascript
复制
systemctl enable --now kubelet

配置供kubelet使用的cgroup驱动

如果使用Dockerkubeadm会自动检测cgroup驱动,并在运行时,自动配置/var/lib/kubelet/config.yaml中对应驱动配置

如果使用其它CRI,需要传递cgroupDriverkubeadm init,形如以下

代码语言:javascript
复制
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: <value>

查看更多,请查看 Using kubeadm init with a configuration file.

注意,仅CRI驱动不是cgroupfs时才需要传递cgroupDriver ,因为cgroupfs为kubelet的默认驱动。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-09-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实践环境
  • 开始之前
  • 检查网络适配器
  • 确保桥接通信(bridged traffic)对iptables可见
  • 检查必备端口
    • Control-plane node(s)
      • Worker node(s)
      • 禁用Swap
      • 安装运行时
      • 安装kubeadm, kubelet 和 kubectl
        • 安装CNI插件(为大多数pod网络所需)
          • 安装crictl(为kubeadm/Kubelet CRI)所需)
            • 安装kubeadm, kubelet 和 kubectl并添加kubelet系统服务
              • 设置允许开机启动kubelet,并立即启动
              • 配置供kubelet使用的cgroup驱动
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档