关于k8s:零基础入门云原生k8s安装配置及运行~

29次阅读

共计 5486 个字符,预计需要花费 14 分钟才能阅读完成。

作者:石义峰

起源:恒生 LIGHT 云社区

k8s 装置配置运行

装置环境倡议

k8s 零碎由一组可执行程序组成,可在 GitHub 上 k8s 我的项目页面下载编译好的二进制安装包,也可间接下载其源码编译后装置。

装置环境可参照 k8s 官网,倡议如下:

  • 一台兼容的 Linux 主机。Kubernetes 我的项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令
  • 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你利用的运行内存)
  • 2 CPU 核或更多
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都能够)
  • 节点之中不能够有反复的主机名、MAC 地址或 product_uuid。请参见这里理解更多详细信息。
  • 开启机器上的某些端口。请参见这里 理解更多详细信息。
  • 禁用替换分区。为了保障 kubelet 失常工作,你 必须 禁用替换分区。
软硬件 举荐配置
CPU/ 内存 Master:至多 2C2G
Node:依据具体须要运行的容器数量调整
Linux 操作系统 Redhat 7+
Centos 7+
K8S 1.18+
下载地址及阐明:https://github.com/kubernetes…
docker 1.13+
下载地址及阐明:https://www.docker.com
etcd 3+
下载地址及阐明:https://github.com/coreos/etc…

版本偏差策略

kube-apiserver

在 HA 集群中,多个 kube-apiserver 实例小版本号最多差 1。

kubelet

kubelet 版本号不能高于 kube-apiserver,最多能够比 kube-apiserver 低两个小版本。

阐明: 如果 HA 集群中多个 kube-apiserver 实例版本号不统一,相应的 kubelet 版本号可选范畴也要减小。

kube-controller-manager、kube-scheduler 和 cloud-controller-manager

kube-controller-managerkube-schedulercloud-controller-manager 版本不能高于 kube-apiserver 版本号。最好它们的版本号与 kube-apiserver 保持一致,但容许比 kube-apiserver 低一个小版本(为了反对在线降级)。

阐明: 如果在 HA 集群中,多个 kube-apiserver 实例版本号不统一,他们也能够跟 任意一个 kube-apiserver 实例通信(例如,通过 load balancer),但 kube-controller-managerkube-schedulercloud-controller-manager 版本可用范畴会相应的减小。

kubectl

kubectl 能够比 kube-apiserver 高一个小版本,也能够低一个小版本。

阐明: 如果 HA 集群中的多个 kube-apiserver 实例版本号不统一,相应的 kubectl 可用版本范畴也会减小。

k8s 装置

确保每个节点上 MAC 地址和 product_uuid 的唯一性

  • 你能够应用命令ip linkifconfig -a 来获取网络接口的 MAC 地址
  • 能够应用sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验

一般来讲,硬件设施会领有惟一的地址,然而有些虚拟机的地址可能会反复。Kubernetes 应用这些值来惟一确定集群中的节点。如果这些值在每个节点上不惟一,可能会导致装置失败。

查看网络适配器

如果你有一个以上的网络适配器,同时你的 Kubernetes 组件通过默认路由不可达,咱们倡议你事后增加 IP 路由规定,这样 Kubernetes 集群就能够通过对应的适配器实现连贯。

容许 iptables 查看桥接流量

确保 br_netfilter 模块被加载。这一操作能够通过运行 lsmod | grep br_netfilter 来实现。若要显式加载该模块,可执行 sudo modprobe br_netfilter

为了让你的 Linux 节点上的 iptables 可能正确地查看桥接流量,你须要确保在你的 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1。例如:

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

查看所需端口

管制节点

协定 方向 端口范畴 作用 使用者
TCP 入站 6443 Kubernetes API 服务器 所有组件
TCP 入站 2379-2380 etcd 服务器客户端 API kube-apiserver, etcd
TCP 入站 10250 Kubelet API kubelet 本身、管制立体组件
TCP 入站 10251 kube-scheduler kube-scheduler 本身
TCP 入站 10252 kube-controller-manager kube-controller-manager 本身

工作节点

协定 方向 端口范畴 作用 使用者
TCP 入站 10250 Kubelet API kubelet 本身、管制立体组件
TCP 入站 30000-32767 NodePort 服务† 所有组件

以上是节点的默认端口范畴,须要保障所定制的端口是凋谢的。

尽管管制节点曾经蕴含了 etcd 的端口,也能够应用自定义的内部 etcd 集群,或是指定自定义端口。

应用的 Pod 网络插件 也可能须要某些特定端口开启。因为各个 Pod 网络插件都有所不同,请参阅各自文档中对端口的要求。

装置 runtime:containerd/docker

装置 containerd

装置和配置的先决条件:

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 设置必须的 sysctl 参数,这些参数在重新启动后依然存在。cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

# 利用 sysctl 参数而无需重新启动
sudo sysctl --system

装置 :

  1. 从官网 Docker 仓库装置 containerd.io 软件包。能够在 装置 Docker 引擎 中找到无关为各自的 Linux 发行版设置 Docker 存储库和装置 containerd.io 软件包的阐明。
  2. 配置 containerd:

    sudo mkdir -p /etc/containerd
    containerd config default | sudo tee /etc/containerd/config.toml
  3. 重新启动 containerd:

    sudo systemctl restart containerd

装置 Docker

  1. 在每个节点上,依据装置 Docker 引擎 为你的 Linux 发行版装置 Docker。最新的通过验证的 Docker 版本 依赖关系:https://github.com/kubernetes…
  2. 配置 Docker 守护程序,尤其是应用 systemd 来治理容器的 cgroup。

    sudo mkdir /etc/docker
    cat <<EOF | sudo tee /etc/docker/daemon.json
    {"exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {"max-size": "100m"},
      "storage-driver": "overlay2"
    }
    EOF

    阐明: 对于运行 Linux 内核版本 4.0 或更高版本,或应用 3.10.0-51 及更高版本的 RHEL 或 CentOS 的零碎,overlay2是首选的存储驱动程序。

  3. 重新启动 Docker 并在启动时启用:

    sudo systemctl enable docker
    sudo systemctl daemon-reload
    sudo systemctl restart docker

装置 kubeadm、kubelet、kubectl

  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。

获取

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/ku…
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/ku…
https://mirrors.aliyun.com/ku…
EOF

装置

yum install kubelet kubeadm kubectl

装置 k8s 集群

初始化管制节点

管制立体节点是运行管制立体组件的机器,包含 etcd(集群数据库)和 API Server(命令行工具 kubectl 与之通信)。

  1. (举荐)如果打算将单个管制立体 kubeadm 集群升级成高可用,你应该指定--control-plane-endpoint 为所有管制立体节点设置共享端点。端点能够是负载均衡器的 DNS 名称或 IP 地址。
  2. 抉择一个 Pod 网络插件,并验证是否须要为kubeadm init 传递参数。依据你抉择的第三方网络插件,你可能须要设置--pod-network-cidr 的值。

要初始化管制立体节点,运行:

kubeadm init <args>

示例参考:

kubeadm init –image-repository=daocloud.io/daocloud –kubernetes-version=v1.17.4 –pod-network-cidr=10.252.0.0/16 –upload-certs

配置 kubectl

要使非 root 用户能够运行 kubectl,请运行以下命令,它们也是 kubeadm init 输入的一部分:

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

或者,如果你是 root 用户,则能够运行:

export KUBECONFIG=/etc/kubernetes/admin.conf

退出节点

节点是你的工作负载(容器和 Pod 等)运行的中央。要将新节点增加到集群,请对每台计算机执行以下操作:

  • SSH 到机器
  • 成为 root(例如sudo su -
  • 运行kubeadm init 输入的命令。例如:
kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>

如果没有令牌,能够通过在管制立体节点上运行以下命令来获取令牌:

kubeadm token list

输入相似于以下内容:

TOKEN                    TTL  EXPIRES              USAGES           DESCRIPTION            EXTRA GROUPS
8ewj1p.9r9hcjoqgajrj4gi  23h  2018-06-12T02:51:28Z authentication,  The default bootstrap  system:
                                                   signing          token generated by     bootstrappers:
                                                                    'kubeadm init'.        kubeadm:
                                                                                           default-node-token

默认状况下,令牌会在 24 小时后过期。如果要在以后令牌过期后将节点退出集群,则能够通过在管制立体节点上运行以下命令来创立新令牌:

kubeadm token create

输入相似于以下内容:

5didvk.d09sbcov8ph2amjw

如果你没有 --discovery-token-ca-cert-hash 的值,则能够通过在管制立体节点上执行以下命令链来获取它:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'

输入相似于以下内容:

8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78

装置 CNI

这里采纳 calico:

kubectl apply -f https://docs.projectcalico.or…

运行第一个 hello world

kubectl run -it –rm [定义的名称] –image=[你的镜像地址]–restart=Never — echo“hello world”

正文完
 0