k8s安装-根据官网文档(kubeadm方式)
官方文档步骤
时间:2022.9.21
版本:v1.25.0
说明:默认安装步骤在每个服务器都需要执行,单独安装会注明
一、安装kubeadm
要求:
-
一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。
-
每台机器
2 GB
或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。 -
CPU
2 核心
及以上。 -
集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。
-
节点之中不可以有重复的
主机名
、MAC
地址或product_uuid
。-
`一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。 Kubernetes 使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装失败。`
-
你可以使用命令
ip link
或ifconfig -a
来获取网络接口的 MAC 地址ip link
-
可以使用 sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验
sudo cat /sys/class/dmi/id/product_uuid
-
-
开启机器上的某些端口(如果你的公司已经有了统一的安全防护,内网可以直接关闭防火墙)。
- 控制面板服务器(就是提供api的那个,通常就是master)
协议 方向 端口范围 目的 使用者 TCP 入站 6443 Kubernetes API server 所有 TCP 入站 2379-2380 etcd server client API kube-apiserver, etcd TCP 入站 10250 Kubelet API 自身, 控制面 TCP 入站 10259 kube-scheduler 自身 TCP 入站 10257 kube-controller-manager 自身 - 各个工作节点
协议 方向 端口范围 目的 使用者 TCP 入站 10250 Kubelet API 自身, 控制面 TCP 入站 30000-32767 NodePort Services† 所有 -
禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区。
swapoff -a
1、安装容器运行时(我们安装containerd作为运行时
)
常用的有三个容器运行时供你选择
- containerd(
推荐
) - cri-o
- docker engine(using cri-dockerd)(
不要再使用,自v1.24版本后已经不再支持
)
1.1、安装前的配置
1.1.1、转发 IPv4 并让 iptables 看到桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
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
# 应用 sysctl 参数而不重新启动
sudo sysctl --system
运行以下命令查看是否成功配置
lsmod | grep br_netfilter
1.2、安装containerd容器运行时
官方提供了三种安装方式
- 来自官方的二进制文件
- 1.安装containerd
- 2.安装runc
- 3.安装CNI plugins
- 使用
apt-get
ordnf
(详见docker官方文档) - 从源码安装(
一般人应该不会采用这种方式,所以这里就不讲了
)
1.2.1、通过官方二进制文件的方式安装
-
安装containerd
tar Cxzvf /usr/local containerd-1.6.2-linux-amd64.tar.gz bin/ bin/containerd-shim-runc-v2 bin/containerd-shim bin/ctr bin/containerd-shim-runc-v1 bin/containerd bin/containerd-stress
- 下载containerd.service
将下载下来的文件放到/usr/local/lib/systemd/system/containerd.service
- 使服务生效
systemctl daemon-reload systemctl enable --now containerd
- 生成默认配置文件、并修改配置、重启服务
#创建文件夹 mkdir -p /etc/containerd #生成默认配置文件 containerd config default > /etc/containerd/config.toml #因为k8s.gcr.io国内不能访问修改k8s.gcr.io为registry.aliyuncs.com/google_containers sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml #如果使用systemd cgroup驱动,需要做此配置 #[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] # SystemdCgroup = false将false改成true vim /etc/containerd/config.toml #重启containerd systemctl restart containerd systemctl enable containerd #查看containerd状态 systemctl status containerd
- 下载containerd.service
-
安装runc
- 下载
runc.<ARCH>
- 执行安装
install -m 755 runc.amd64 /usr/local/sbin/runc
- 下载
-
安装CNI plugins
$ mkdir -p /opt/cni/bin $ tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz ./ ./macvlan ./static ./vlan ./portmap ./host-local ./vrf ./bridge ./tuning ./firewall ./host-device ./sbr ./loopback ./dhcp ./ptp ./ipvlan ./bandwidth
1.3、安装kubeadm、kubelet和kubectl(公司内网限制采用先下载安装包的方式)
kubedm依赖crictl、kubernetes-cni、cri-tools、kubectl、kubelet,所以最后执行kubeadm的安装
例如,安装cri-tools:
dpkg -i cri-tools_1.24.2-00_amd64_8ce48ca39ead11b4b3ba109d57439f9024e6e53bb3261ba75466d403542a5908.deb
此时安装步骤已经完成,接下来进行kubeadm的初始化
二、使用kubeadm创建集群(在任意一台master上执行
)
生成初始化集群的配置文件
kubeadm config print init-defaults > kubeadm-conf.yaml
注意修改文件的一部分
vim kubeadm-conf.yaml
#以下为kubeadm-conf.yaml的内容
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
#值为你本机的ip地址,一定是ip地址,ipv4或者ipv6都行
advertiseAddress: 10.96.0.147
bindPort: 6443
nodeRegistration:
#生成的默认值可能是unix:///var/run/containerd/containerd.sock请注意修改没有前面的/var
criSocket: unix:///run/containerd/containerd.sock
#这个值的可选项为Always、IfNotPresent、Never,如果你有网络连接,可以配置成Always,IfNotPresent,如果没有网络连接请配置成IfNotPresent或者Never,因为我们需要提前准备镜像,所以默认值IfNotPresent即可,别修改
imagePullPolicy: IfNotPresent
#这个是你当前主机的hostname
name: k8s-master-a
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
#如果仅有国内网络访问,请修改成阿里的镜像:registry.aliyuncs.com/google_containers
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.25.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
scheduler: {}
1、准备需要的镜像(可以连接外网的可以忽略这步
)
1.1、 查看需要哪些镜像
#查看需要的镜像
kubeadm config images list --config kubeadm-conf.yaml
1.2、下载需要的镜像
虽然不能直接连接外网,但是公司配有阿里的docker镜像服务,所以我们先用docker下载下来镜像
请确保你的代理镜像有代理到registry.aliyuncs.com
,并且给你当前服务器上的docker做代理镜像配置
如果你使用的Nexus请确保有Repositories代理阿里镜像地址
执行docker pull将镜像下载到本地
docker pull docker镜像服务器地址:端口号/google_containers/kube-apiserver:v1.25.0
docker pull docker镜像服务器地址:端口号/google_containers/kube-controller-manager:v1.25.0
docker pull docker镜像服务器地址:端口号/google_containers/kube-scheduler:v1.25.0
docker pull docker镜像服务器地址:端口号/google_containers/kube-proxy:v1.25.0
docker pull docker镜像服务器地址:端口号/google_containers/pause:3.8
docker pull docker镜像服务器地址:端口号/google_containers/etcd:3.5.4-0
docker pull docker镜像服务器地址:端口号/google_containers/coredns:v1.9.3
注意
:这里的镜像名称要与kubeadm config images list --config kubeadm-conf.yaml
的名称保持一致
所以如果不一致,1.可以配置成一致,只需要你在kubeadm-conf.yaml
中的imageRepository: docker镜像服务器地址:端口号/google_containers
即可,2.你也可以进行docker tag来重新命名来保持一致,如:
docker tag docker镜像服务器地址:端口号/google_containers/kube-apiserver:v1.25.0 register.aliyuncs.com/google_containers/kube-apiserver:v1.25.0
1.3、将镜像导入到containerd中
因为我们k8s安装的运行时是containerd,所以,将镜像导入到containerd中
1.3.1、将上一步中的镜像打包
注意
:这里的docker镜像服务器地址:端口号也可能是register.aliyuncs.com或其他名字,取决于你上一步是如何做到镜像名称与kubeadm-conf.yaml
中的imageRepository
保持一致
docker save docker镜像服务器地址:端口号/google_containers/kube-apiserver:v1.25.0 > kube-apiserver.tar
docker save docker镜像服务器地址:端口号/google_containers/kube-controller-manager:v1.25.0 > kube-controller-manager.tar
docker save docker镜像服务器地址:端口号/google_containers/kube-scheduler:v1.25.0 > kube-scheduler.tar
docker save docker镜像服务器地址:端口号/google_containers/kube-proxy:v1.25.0 > kube-proxy.tar
docker save docker镜像服务器地址:端口号/google_containers/pause:3.8 > pause.tar
docker save docker镜像服务器地址:端口号/google_containers/etcd:3.5.4-0 > etcd.tar
docker save docker镜像服务器地址:端口号/google_containers/coredns/coredns:v1.9.3 > coredns.tar
1.3.2、将镜像导入到containerd
注意
:-n k8s很重要,k8s默认使用的命名空间是k8s.io,如果不加就使用不了
ctr -n k8s.io image import kube-apiserver.tar
ctr -n k8s.io image import kube-controller-manager.tar
ctr -n k8s.io image import kube-scheduler.tar
ctr -n k8s.io image import kube-proxy.tar
ctr -n k8s.io image import pause.tar
ctr -n k8s.io image import etcd.tar
ctr -n k8s.io image import coredns.tar
2、执行主节点初始化操作
2.1、执行初始化
kubeadm init --config kubeadm-conf.yaml --v=5
·
·
·
#下面为该命令的输出最后一部分,这部分请保留,接下来的操作需要用到
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/
You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
kubeadm join k8s-master-a:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:b5e2ec275d04bf57ad10c867d511b7d9b413191f92c228b4387568ae157d75a9 \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join k8s-master-a:6443 --token 5didvk.d09sbcov8ph2amjw \
--discovery-token-ca-cert-hash sha256:b5e2ec275d04bf57ad10c867d511b7d9b413191f92c228b4387568ae157d75a9
如果你是普通用户操作的:请执行以下命令
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
查看集群状态
kubectl cluster-info
2.2、添加其他主节点
在其他主节点上使用root
身份执行:
kubeadm join k8s-master-a:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:b5e2ec275d04bf57ad10c867d511b7d9b413191f92c228b4387568ae157d75a9 \
--control-plane
2.3、 安装Pod网络附加组件
请参阅
更多推荐
所有评论(0)