部署 Kubernetes
Kubernetes 有多种部署方式,一般不是很推荐使用 kubeadm 方式安装(主要是因为众所周知的大陆网络原因),以下采用的却是 kubeadm 方式。。
前置条件
最低需求:
- 2 GB 及以上 RAM
- 2 CPUs (双核以上 CPU)
- 集群内网络互通
- 禁用 Swap (必须关闭 swap 以便 kubelet 工作正常)
唯一性:
确保 MAC 地址和设备识别码在集群内唯一
- MAC 地址可以通过 ip link 查看
- 设备识别码可以通过 cat /sys/class/dmi/id/product_uuid 查看
小贴士:如果服务器使用硬盘克隆或者批量部署的虚拟机可能存在此问题,一般情况下可忽略。
网络通讯:
让 iptables 接管流量,确保当前使用的是 br_netfilter 模块。
# lsmod | grep br_netfilter //查看是否已加载
# modprobe br_netfilter //如果未加载需要手动加载(需要内核的支持)
修改sysctl配置:
# cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# sysctl --system
检查所需端口:
全新机器可以跳过本步骤,主要是为了防止端口冲突导致。
- 控制节点
协议 | 方向 | 端口范围 | 作用 | 使用者 |
---|---|---|---|---|
TCP | 入站 | 6443* | Kubernetes API 服务器 | 所有组件 |
TCP | 入站 | 2379-2380 | Etcd server client API | Kube-apiserver,etcd |
TCP | 入站 | 10250 | Kudelet API | 自身、控制平面组件 |
TCP | 入站 | 10251 | Kube-scheduler | 自身 |
TCP | 入站 | 10252 | Kube-controller-manager | 自身 |
- 工作节点
协议 | 方向 | 端口范围 | 作用 | 使用者 |
---|---|---|---|---|
TCP | 入站 | 10250 | Kubelet API | 自身、控制平面组件 |
TCP | 入站 | 30000-32767 | NodePort 服务* | 所有组件 |
禁用Swap分区:
# swapoff -a
小贴士:如果在服务器安装时添加了swap分区,则修改/etc/fstab,将类型为swap的分区注释,防止重启设备时自动挂载。
一、安装Kubernets
1. 添加Kubernets源
# curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
# echo "deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main" | tee -a /etc/apt/sources.list.d/kubernetes.list
2. 安装
# apt-get update
# apt-get install -y kubelet kubeadm kubectl
# apt-mark hold kubelet kubeadm kubectl
//kubelet kubeadm kubectl解释
kubelet 在群集中所有节点上运行的核心组件, 用来执行如启动 pods 和 containers 等操作。
kubeadm 引导启动 k8s 集群的命令行工具,用于初始化 Cluster。
kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。
3. 配置及优化
# 命令行补齐(为 kubectl、kubeadm 命令配置命令行补全功能)
- kubectl
# kubectl completion bash > /etc/bash_completion.d/kubectl
- kubeadm
# mkdir ~/.kube
# kubeadm completion bash > $HOME/.kube/kubeadm_completion.bash.inc
# printf "# Kubeadm shell completion\nsource '$HOME/.kube/kubeadm_completion.bash.inc'\n" >> $HOME/.bash_profile
二、准备所需镜像
# 无法连接外网,直接使用国内阿里云的缓存镜像
1. 查看所需下载的组件
# kubeadm config images list | tee -a image.list
k8s.gcr.io/kube-apiserver:v1.20.2
k8s.gcr.io/kube-controller-manager:v1.20.2
k8s.gcr.io/kube-scheduler:v1.20.2
k8s.gcr.io/kube-proxy:v1.20.2
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0
2. 下载aliyun镜像
# vim get-k8s-images.sh
#!/bin/bash
cat image.list | while read line
do
aliImage=`echo $line | sed "s/k8s.gcr.io/registry.cn-hangzhou.aliyuncs.com\/google_containers/g"`
docker pull $aliImage
docker tag $aliImage $line
docker rmi $aliImage
done
# bash get-k8s-images.sh
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.20.2 43154ddb57a8 2 weeks ago 118MB
k8s.gcr.io/kube-apiserver v1.20.2 a8c2fdb8bf76 2 weeks ago 122MB
k8s.gcr.io/kube-controller-manager v1.20.2 a27166429d98 2 weeks ago 116MB
k8s.gcr.io/kube-scheduler v1.20.2 ed2c44fbdd78 2 weeks ago 46.4MB
k8s.gcr.io/etcd 3.4.13-0 0369cf4303ff 5 months ago 253MB
k8s.gcr.io/coredns 1.7.0 bfe3a36ebd25 7 months ago 45.2MB
k8s.gcr.io/pause 3.2 80d28bedfe5d 11 months ago 683kB
小贴士: 通过脚本下载阿里云镜像,改名、删除一气呵成,如何有自己的能连接外网仓库请参考下方链接↓
私有仓库拉取镜像
附录
相关链接:
参考链接: