安装需要一定的顺序
1. 切换到root账户
sudo su -
2. 安装 三大组件及依赖
- 内网安装
dkpg -i cri-tools_xxxx.deb
dkpg -i kubernets-cni_xxxx.deb
dkpg -i ebtables_xxx.deb
dkpg -i ethtool_xxx.deb
dkpg -i conntrack_xxx.deb
dkpg -i kubelet_1.18.2_xx.deb
dkpg -i kubectl_1.18.2_xx.deb
dkpg -i kubeadm_1.18.2_xx.deb
- 外网安装
## ubuntu
apt-get update && apt-get install -y apt-transport-https
curl http://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF > /etc/apt/source.list.d/kubernetes.list
deb http://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
## centos
1. 关闭 seliunx
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
2. 换源
sudo cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
EOF
sudo yum install kubeadm kubelet kubectl
## 配置
kubeadm version 查看版本
sudo systemctl enable --now kubelet 设置开机自启
3. k8s安装
1. 初始化k8s集群 master节点
1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2. 关闭交换内存
swapoff -a
kubeadm init
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers # 集群的镜像仓库
--kubernetes-version v1.18.2 # k8s版本
--pod-network-cidr=10.244.0.0/16 # pod的ip范围, 需要与flannel组件对应
--service-cidr=10.96.0.0/12 # service的ip范围
以上步骤成功之后,末尾会打印Worker节点join命令,worker节点加入时使用
可能的报错处理
## 错误信息1:
nodeRegistration.name: Invalid value: "vm_0_2_centos": a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
错误的原因是主机hostname不符合k8s的命名规范
解决方式为更改主机hostname名称:
hostnamectl set-hostname k8s-master
## 错误信息2:
[ERROR Swap]: running with swap on is not supported, please disable swap
解决方式: 关闭swap内存交换 swapoff -a
## 错误信息3:
[ERROR ImagePull]: fail to pull xxx
1. 首先查询自己配置的image-repository 是否正确
2. 查看自己的docker证书是否过期
docker pull xxx
3. 如果证书过期, 更换证书的方式为:
vim /etc/docker/certs.d/ca.crt
替换原有的证书内容
## 错误信息4:
错误关键信息总结:
Kubernetes version: v1.21.3,依赖/coredns/coredns:v1.8.0,registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0 不存在。
解决方案:
本地执行以下命令:
docker pull coredns/coredns:1.8.0
docker tag coredns/coredns:1.8.0 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0
## 错误信息5:
- [kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp 127.0.0.1:10248: connect: connection refused.
- 原因:
docker的cgroup驱动程序默认设置为system。默认情况下Kubernetes cgroup为systemd,我们需要更改Docker cgroup驱动,
- 解决办法:
1. kubeadm reset
2. vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"] ## 新增此配置
}
3. systemctl daemon-reload
4. systemctl restart docker
5. 重新初始化集群
## 错误信息6:
- 管理节点服务器重启后, docker无法启动api-server等容器
- 原因:
通过systemctl status kubelet 查看发现报错: kubelet cgroup driver: “cgroupfs” is different from docker cgroup driver: “systemd”
分析为: kubelet 与 docker 的 cgroup 不同导致的
- 解决办法:
1. 通过查询, 发现推荐使用的 cgroup为 systemd
2. 可以通过 `错误信息4` 查看如何修改 docker 的cgroup
3. 修改 kubelet的 cgroup
- vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
在KUBELET_KUBECONFIG_ARGS 后面追加 --cgroup-driver=systemd
- vim /var/lib/kubelet/kubeadm-flags.env
在 KUBELET_KUBEADM_ARGS 后面追加 --cgroup-driver=systemd
4. 重启kubelet:
- systemctl daemon-reload
- systemctl restart kubelet
2. 配置 .kube
执行成功上述命令后使用 kubectl get node 会报错,需执行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3. 配置flannel
执行完上述操作后 kubectl get node 命令status显示 NotReady, 需安装flannel组件
# 从github中下载 kube-flannel.yaml
https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml
kubectl apply -f 文件地址
ps: 需要下载的是 kube-flannel.yaml文件, 下载其它文件可能会报错
可能的报错处理
# 错误1:
`flannel状态为Init:ImagePullBackOff`
原因: 查看kube-flannel.yml文件时发现quay.io/coreos/flannel:v0.13.1-amd64, 这是因为quay.io网站目前国内无法访问
解决办法:
去https://github.com/coreos/flannel/releases官方仓库下载镜像
导入本地docker仓库
docker load < flanneld-v0.13.0-amd64.docker
---
# 错误2:
`coredns pod显示:error connect: no route to host`
解决办法操作:
systemctl stop kubelet
systemctl stop docker
iptables --flush
iptables -tnat --flush
systemctl start kubelet
systemctl start docker
---
# 错误3:主节点重启后报错
`The connection to the server 192.168.37.201:6443 was refused - did you specify the right host or port?`
解决方法:
systemctl daemon-reload
systemctl restart kubelet
---
# 错误4:
`pod内的服务访问不了外网[包括prometheus的target连接失败]`
解决方法:
具体问题的原因还未找到, 初步的解决方法为:
1、 清理iptables : iptables -F && iptables -t nat -F
2、 重启集群内所有的svc: kubectl get svc/'svc-name' -o yaml | kubectl replace -f - --force
3、此时访问不了外网的问题就可以解决
4. 重置集群
1. 重置
kubeadm reset
2. 删除残留配置
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip linl delete flannel.1
systemctl start docker
清理iptables
iptable -F && iptables -t nat -F
4. helm安装
helm 是 k8s的包管理工具, 能快速查找、下载和安装软件包
# 1. 从github下载helm
https://github.com/helm/helm/releases/tag/v3.4.1
选择 binaries 文件下载
2. 将 helm 解压移动到 /usr/bin
tar zxvf helm-v3.4.1-linux-amd64.tar.gz
cp linux-amd64/helm /usr/bin/
3. 验证
helm help