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

网友投稿 236 2022-09-12

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

作者:石义峰

k8s安装配置运行

安装环境建议

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

安装环境可参照k8s官网,建议如下:

一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)2 CPU 核或更多集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见​​这里​​了解更多详细信息。开启机器上的某些端口。请参见​​这里​​ 了解更多详细信息。禁用交换分区。为了保证 kubelet 正常工作,你​必须​禁用交换分区。

软硬件

推荐配置

CPU/内存

Master:至少2C2G<br />Node:根据具体需要运行的容器数量调整

Linux操作系统

Redhat 7+<br />Centos 7+

K8S

1.18+<br />下载地址及说明:​​data-id="t6b20032-bGOKO3P3" style="">

docker

1.13+<br />下载地址及说明:​​data-id="t6b20032-rBgh9UK8" style="">

etcd

3+<br />下载地址及说明:​​集群中, 多个 ​​kube-apiserver​​ 实例小版本号最多差1。

kubelet

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

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

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

​​kube-controller-manager​​​、​​kube-scheduler​​​ 和 ​​cloud-controller-manager​​​ 版本不能高于 ​​kube-apiserver​​​ 版本号。 最好它们的版本号与 ​​kube-apiserver​​​ 保持一致,但允许比 ​​kube-apiserver​​ 低一个小版本(为了支持在线升级)。

​说明:​​ 如果在 HA 集群中,多个 ​​kube-apiserver​​​ 实例版本号不一致,他们也可以跟 任意一个 ​​kube-apiserver​​​ 实例通信(例如,通过 load balancer), 但 ​​kube-controller-manager​​​、​​kube-scheduler​​​ 和 ​​cloud-controller-manager​​ 版本可用范围会相应的减小。

kubectl

​​kubectl​​​ 可以比 ​​kube-apiserver​​ 高一个小版本,也可以低一个小版本。

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

k8s安装

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

你可以使用命令​​ip link​​​ 或​​ifconfig -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 <

检查所需端口

控制节点

协议

方向

端口范围

作用

使用者

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 <

安装 :

从官方Docker仓库安装 ​​containerd.io​​​ 软件包。可以在 ​​安装 Docker 引擎​​​ 中找到有关为各自的 Linux 发行版设置 Docker 存储库和安装 ​​containerd.io​​ 软件包的说明。配置 containerd:sudo mkdir -p /etc/containerdcontainerd config default | sudo tee /etc/containerd/config.toml重新启动 containerd:sudo systemctl restart containerd

安装Docker

在每个节点上,根据​​安装 Docker 引擎​​​ 为你的 Linux 发行版安装 Docker。 最新的经过验证的 Docker 版本 ​​依赖关系​​​:​​Docker 守护程序,尤其是使用 systemd 来管理容器的 cgroup。sudo mkdir /etc/dockercat <

安装kubeadm、kubelet、kubectl

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

#获取

cat <​​​​​ /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=​​enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=​​​​EOF

#安装 yum install kubelet kubeadm kubectl

安装k8s集群

初始化控制节点

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

(推荐)如果计划将单个控制平面 kubeadm 集群升级成高可用, 你应该指定​​--control-plane-endpoint​​ 为所有控制平面节点设置共享端点。 端点可以是负载均衡器的 DNS 名称或 IP 地址。选择一个Pod网络插件,并验证是否需要为​​kubeadm init​​​ 传递参数。 根据你选择的第三方网络插件,你可能需要设置​​--pod-network-cidr​​ 的值。

要初始化控制平面节点,运行:

kubeadm init

示例参考:

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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo 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 : --discovery-token-ca-cert-hash sha256:

如果没有令牌,可以通过在控制平面节点上运行以下命令来获取令牌:

kubeadm token list

输出类似于以下内容:

TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS8ewj1p.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 ​​world

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:首席营销官:被“颜值”绑架的女孩子,慌得一批!
下一篇:零基础入门云原生-k8s工具介绍~
相关文章

 发表评论

暂时没有评论,来抢沙发吧~