k8s安装部署

663 阅读5分钟

一. 使用 Kuboard-Spray安装部署k8s
文档:github.com/eip-work/ku…

  1. 安装

默认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

  1. 使用 在浏览器输入 http://ip:8077 , 用户名:admin, 密码Kuboard123

屏幕截图.jpg

按页面提示进行配置安装即可

二. 国内环境

3台腾讯云轻应用服务器,其中一台作为master,两台作为node

机器配置hostname
10.0.0.152C 2Gmaster
10.0.0.122C 2Gnode1
10.0.0.142C 2Gnode2
  1. 安装前操作 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 node1hostnamectl 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
  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
  1. 安装集群网络

可以选择 flannel或者 Calico,这里安装 flannel kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 看到created,即创建成功

  1. 查看集群信息 kubectl get node
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   17m   v1.24.0
  1. 安装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, 可查看节点情况

屏幕截图123.jpg

报错: It seems like the kubelet isn't running or healthy 解决: crictl config runtime-endpoint ``/run/containerd/containerd``.sock

【报错】

  1. tc not found in system path
    解决: dnf install -y iproute-tc

  2. /proc/sys/net/ipv4/ip_forward contents are not set to 1
    解决: echo 1 > /proc/sys/net/ipv4/ip_forward

  3. /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
    解决:modprobe br_netfilter

  4. unknown service runtime.v1alpha2.RuntimeService
    解决

rm /etc/containerd/config.toml
systemctl restart containerd

  1. couldn't validate the identity of the API Server 解决:(在master执行)可能是token过期了, kubeadm token list 如果为空,就是过期了,重新生成一个 kubeadm token create
    然后 kubeadm token create --print-join-command 显示添加node命令

【参考】 www.iamlightsmile.com/articles/Ce…