跳转到主要内容

安装k8s-v1.20.15

选择高可用方案

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