安装k8s-v1.20.15
选择高可用方案
- 使用kube-vip方案(简单):https://iovhm.com/book/books/k8s/page/kube-vipk8s
- 【推荐】 使用keepalived方案(独立可控):https://iovhm.com/book/books/42e7a/page/dockers-composekeepalived
kube-vip方案首先要求k8s集群是正常的,才能虚拟出虚拟IP,在集群出现故障后可能导致不好排除问题,优选keepalived方案
开始安装
# 修改主机名
hostnamectl set-hostname 5-10.vpclub.io
# 修改hosts文件,将所有节点加入,为了便于后续扩展,建议为master单独增加一个主机名:kube-api-server
vi /etc/hosts
192.168.5.10 5-10.vpclub.io
192.168.5.10 kube-api-server
# 下载 k8s 安装文件
# 查看k8s 最新版本 https://dl.k8s.io/release/stable.txt
# 或者从google网站下载
# curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 三个主程序
wget qq829.cn/uploads/software/k8s/v1.20.15/kubeadm
wget qq829.cn/uploads/software/k8s/v1.20.15/kubelet
wget qq829.cn/uploads/software/k8s/v1.20.15/kubectl
# docker-compose
wget qq829.cn/uploads/software/k8s/docker-compose
# 服务配置文件
wget qq829.cn/uploads/software/k8s/v1.20.15/10-kubeadm.conf
wget qq829.cn/uploads/software/k8s/v1.20.15/kubelet.service
# 插件
wget qq829.cn/uploads/software/k8s/v1.20.15/calico.yaml
wget qq829.cn/uploads/software/k8s/v1.20.15/traefik-ingress.tar
# cni网络插件镜像加速
wget qq829.cn/uploads/software/k8s/v1.20.15/calico-image-vp-whdev.yaml
# 复制可执行文件到 /usr/local/bin 并给予执行权限
chmod 777 kubeadm kubelet kubectl docker-compose
cp kubeadm kubelet kubectl docker-compose /usr/local/bin
# 安装 socat conntrack 依赖软件
yum install -y socat
yum install -y conntrack
# 安装docker,修改docke运行方式
vi /etc/docker/daemon.json
{
"graph":"/data/docker",
"exec-opts": ["native.cgroupdriver=systemd"]
}
# 安装kubelet服务,开启服务自启动
# 需要注意 服务文件里面的执行路径,
cp kubelet.service /usr/lib/systemd/system/kubelet.service
mkdir -p /etc/systemd/system/kubelet.service.d
cp 10-kubeadm.conf /etc/systemd/system/kubelet.service.d
# 设置kubelet 开机启动服务
systemctl enable kubelet.service
systemctl status kubelet
多master安装(推荐,后期便于扩展多节点,前期也可以单节点使用)
# 使用kubeadm 安装
# 1.24.0 以前安装方法,会自动使用docker
# 为了便于扩展,建议apiserver使用主机名:kube-api-server:6443
kubeadm init --control-plane-endpoint "kube-api-server:6443" --image-repository registry.aliyuncs.com/google_containers --upload-certs --kubernetes-version v1.20.15 --pod-network-cidr 10.244.0.0/16 --v 5
# 打印其他master加入节点命令
echo "$(kubeadm token create --print-join-command) --control-plane --certificate-key $(kubeadm init phase upload-certs --upload-certs | tail -1)"
# 打印node加入节点命令
kubeadm token create --print-join-command
单master安装(不推荐),单节点升级为高可用请参照 https://iovhm.com/book/books/k8s/page/k8s-ZsW
# 单机安装(不推荐)
kubeadm init --image-repository registry.aliyuncs.com/google_containers --apiserver-advertise-address 192.168.5.10 --kubernetes-version v1.20.15 --pod-network-cidr 10.244.0.0/16 --v 5
# 重置重新安装
kubeadm reset
# 修改为ipvs模式
# 40行 , 有些是在54行,mode:"ipvs"
kubectl edit cm -n kube-system kube-proxy
# 安装cni网络插件
kubectl apply -f calico.yaml
安装ingress-controller
可以选择traefi-ingress或者nginx-ingress (推荐)
# 安装nginx-ingress
wget qq829.cn/uploads/software/k8s/v1.20.15/nginx-ingress/nginx-ingress.yaml
kubectl apply -f nginx-ingress.yaml
# 安装 traefik-controller
kubeclt apply -f 00-account.yaml -n kube-system
kubeclt apply -f 01-role.yaml -n kube-system
kubeclt apply -f 02-role-binding.yaml -n kube-system
kubeclt apply -f 03-traefik.yaml -n kube-system
kubeclt apply -f 04-traefik-services.yaml -n kube-system
kubeclt apply -f 05-traefik-default-tls.yaml -n kube-system
# 加入节点到集群
# 如果忘记了加入命令,可以再次打印
# kubeadm token create --print-join-command
k8s 证书过期重新续证书指南 https://iovhm.com/book/books/k8s/page/k3srancher
常用命令
https://iovhm.com/book/books/k8s/page/k8s-Si0
常见问题
# 某台主机太差,限制容器数量
# vi /var/lib/kubelet/kubeadm-flags.env
# --max-pods=50
# pod之间ping不通
# kubectl edit cm -n kube-system kube-proxy
# 40行,mode:"ipvs"
# 这个设置应该在安装完成k8s后就处理
k8s容器内pod ping不通的情况下,需要修改kube-proxy模式为:ipvs模式,默认模式是iptables,然后重新启动kube-proxy
# 警告: 组件 controller-manager 不健康
# 警告: 组件 scheduler 不健康
# 编辑以下文件
vi /etc/kubernetes/manifests/kube-controller-manager.yaml
vi /etc/kubernetes/manifests/kube-scheduler.yaml
# 两个文件,删除 --port=0
# calico-node 运行不起来提示 calico/node is not ready: BIRD is not ready: BGP not established
# calico-node 获取的网卡接口不对
# 增加环境变量,其中eth0是网络接口名称
IP_AUTODETECTION_METHOD = interface=eth0
# 如果网卡名称不固定,可以看IP是否可达来探测
IP_AUTODETECTION_METHO = can-reach=192.168.0.254
# traefik-ingress 状态一直显示初始化
# traefik 增加启动参数,ingressendpoint.hostname或者ingressendpoint.hostname两个都填或者只填一个
# 同时要看情况删除(需要多次测试) --providers.kubernetesingress.ingressendpoint.publishedService
--providers.kubernetesingress.ingressendpoint.hostname=park.vpclub.io
--providers.kubernetesingress.ingressendpoint.ip=0.0.0.0
# calico-kube-controllers 异常
# 提示Failed to write status error=open /status/status.json: permission denied
# 挂载一个一个数据卷
# 主机目录/var/run/calico/status 并给予权限 777映射容器目录 /status
# 看情况或者删除健康检查
# load balance L4 一直提示 pedding
# load balance 是收费功能。k8s没有包括这个组件。应该使用 nodeport 或者 hostport
# 可以把部署的traefik 重新克隆一个,修改为DaemonSet 并公布为 host端口模式
# 误删除kube-proxy或者coredns恢复
kubeadm init phase addon kube-proxy --kubeconfig ~/.kube/config --control-plane-endpoint "kube-api-server:6443" --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.28.0 --pod-network-cidr 10.244.0.0/16