一. 使用 Kuboard-Spray安装部署k8s
文档:github.com/eip-work/ku…
- 安装
默认docker已经安装完成
docker run -d \
--restart=unless-stopped \
--name=kuboard-spray \
-p 8077:80/tcp \
-e TZ=Asia/Shanghai \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/kuboard-spray-data:/data \
eipwork/kuboard-spray:latest-amd64
- 使用 在浏览器输入 http://ip:8077 , 用户名:admin, 密码Kuboard123
按页面提示进行配置安装即可
二. 国内环境
3台腾讯云轻应用服务器,其中一台作为master,两台作为node
| 机器 | 配置 | hostname |
|---|---|---|
| 10.0.0.15 | 2C 2G | master |
| 10.0.0.12 | 2C 2G | node1 |
| 10.0.0.14 | 2C 2G | node2 |
- 安装前操作 1.1 关闭防火墙、selinux、swap,三台机器都需要执行。
swap启用后,在使用磁盘空间和内存交换数据时,性能表现会较差,会减慢程序执行的速度,kubelet 在 1.8 版本以后强制要求 swap 必须关闭
# 关闭防火墙
systemctl disable firewalld
# === 永久关闭,需要重启机器 ===
# 将SELINUX=enforcing改为SELINUX=disabled
vim /etc/selinux/config
# 关闭swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
# === 临时关闭,不需要重启,但是重启后会失效 ===
setenforce 0
swapoff -a
检查是否都关闭了
# 检查swap
free -m # 大小为0即已经关闭了
# 查看防火墙状态
systemctl status firewalld
PS: 改完后别忘了重启
1.2 修改三台机器的hosts文件,主要配置hostname
查看当前机器的hostname hostname
centos8修改hostname, 在master机器执行 hostnamectl set-hostname master, 在两台node机器执行 hostnamectl set-hostname node1和hostnamectl set-hostname node2
修改hosts文件,绑定hostname和ip, 三台机器都要执行
# 查看当前机器Ip
ifconfig
# 在hosts文件最后追加,ip为当前机器的内网ip, 这几个机器的内网ip相互是ping的通的
vim /etc/hosts
10.0.0.12 master
10.0.0.14 node1
10.0.0.15 node2
1.3 同步系统时间,所有机器均执行(轻量级应用服务器已有同步配置,此步骤可跳过)
# 安装 chrony
yum -y install chrony
# 编辑chrony.conf 文件
vim /etc/chrony.conf
# 在最后追加
server time1.tencentyun.com iburst
server time2.tencentyun.com iburst
server time3.tencentyun.com iburst
server time4.tencentyun.com iburst
server time5.tencentyun.com iburst
# 保存后重启服务
systemctl restart chronyd
# 设置开机自启动
systemctl enable chronyd
执行 date查看时间是否同步, 执行 chronyc sourcestats -v 查看时间同步源状态
1.4 开启内核转发(三机器均执行)
vim /etc/sysctl.d/k8s.conf
# 输入
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
- 安装 2.1 配置k8s安装源(三机器均执行)
当前阿里云仓库中还没有CentOS8的kubernetes,所以使用CentOS7的安装包,即kubernetes-el7-x86_64,如果有CentOS8的,则为kubernetes-el8-x86_64
vim /etc/yum.repos.d/kubernetes.repo
# 输入
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
2.2 安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
2.3 安装kubectl、kubelet、kubeadm
设置kubelet开机启动,启动kubelet
yum install -y kubectl kubelet kubeadm
# 开机自启动
systemctl enable kubelet
# 启动kubelet
systemctl start kubelet
查看版本
kubeadm version
kubectl version --output=json
kubelet --version
2.4 docker 启动
# 设置开机自启动
systemctl enable docker
# 启动docker
systemctl start docker
2.5 初始化k8s集群(仅master)
先重置一下kubeadm reset
kubeadm init --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=127.0.0.1 --image-repository=registry.aliyuncs.com/google_containers --ignore-preflight-errors=all --kubernetes-version=v1.24.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
apiserver-advertise-address表示:API server 通告给其他组件的 IP 地址,一般应该为 Master 节点的 IP 地址,0.0.0.0 表示节点上所有可用的地址
apiserver-cert-extra-sans表示:用于 API Server 服务证书的可选附加主题备用名称(SAN)。可以是 IP 地址和 DNS 名称
image-repository表示:默认镜像仓库地址:k8s.gcr.io国内无法访问,因此换成阿里的地址
ignore-preflight-errors表示:忽略哪些运行时的错误信息,其值为 Swap 时,表示忽略因 Swap 未关闭而导致的错误
kubernetes-version表示:k8s的版本,上一步查看
service-cidr表示:Service 的网络地址范围,其值为 CIDR 格式的网络地址,默认地址为 10.96.0.0/12
pod-network-cidr表示:Pod 网络的地址范围,其值为 CIDR 格式的网络地址;使用 flannel 网络插件时,其默认地址为 10.244.0.0/16
初始化成功后
Your Kubernetes control-plane has initialized successfully!
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/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.0.0.12:6443 --token k2jluj.ihzk14ogl \
--discovery-token-ca-cert-hash sha256:26f66d86a81361745d5d42dd9d22d451cde40f45b5ac752
其中,最后几行稍后添加node时需要(master不需要),所以记录一下
kubeadm join 10.0.0.12:6443 --token k2jluj.ihzk14ogl \ --discovery-token-ca-cert-hash sha256:26f66d86a81361745d5d42dd9d22d451cde40f45b5ac752
2.6 启动集群 根据以上提示,要启动集群,需要执行:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装集群网络
可以选择 flannel或者 Calico,这里安装 flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml看到created,即创建成功
- 查看集群信息
kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane 17m v1.24.0
- 安装node节点 5.1 docker和kubelet启动
# 设置 docker和kubelet开机自启动
systemctl enable docker kubelet
# 启动docker
systemctl start docker
5.2 加入主节点
kubeadm join 10.0.0.12:6443 --token k2jluj.ihzk14ogl72e9pvm \ --discovery-token-ca-cert-hash sha256:26f66d86a814a361745d5d42dd9d22d451cde40f45b5ac7525b1e9544b8eb09e
如果无法加入,排查以下三个问题 a. token是否已经过期,解决办法见下文错误解决#5
b. master机器和node机器的时间是否同步,通过date查看
c. 6443端口是否在安全组开发
安装完成后,在master机器执行 kubectl get nodes, 可查看节点情况
报错:
It seems like the kubelet isn't running or healthy
解决:
crictl config runtime-endpoint ``/run/containerd/containerd``.sock
【报错】
-
tc not found in system path
解决:dnf install -y iproute-tc -
/proc/sys/net/ipv4/ip_forward contents are not set to 1
解决:echo 1 > /proc/sys/net/ipv4/ip_forward -
/proc/sys/net/bridge/bridge-nf-call-iptables does not exist
解决:modprobe br_netfilter -
unknown service runtime.v1alpha2.RuntimeService
解决
rm /etc/containerd/config.toml
systemctl restart containerd
couldn't validate the identity of the API Server解决:(在master执行)可能是token过期了,kubeadm token list如果为空,就是过期了,重新生成一个kubeadm token create
然后kubeadm token create --print-join-command显示添加node命令