一、创建主机及基础配置

1.安装VMware

点击Fusion and Workstation | VMware

2.安装镜像

镜像采用CentOS-Stream-10-latest版本

百度网盘:
链接:https://pan.baidu.com/s/1a86DYVgeWZHENFnV8y3VdQ?pwd=kmyn 
提取码:kmyn

名称 k8s-master k8s-node1 k8s-node2
内存 4G 4G 4G
cpu 2核2个 2核2个 2核2个
硬盘 60G 60G 60G
IP 192.168.20.100 192.168.20.101 192.168.20.102

3.网络配置(静态)

vi /etc/NetworkManager/system-connections/ens33.nmconnection

# 修改为静态IP(根据自己网关修改)
method=manual
address1=192.168.20.100/24,192.168.20.2
dns=8.8.8.8;114.114.114.114

# 重启生效网络
nmcli c reload
nmcli c up ens33

 4.修改主机名

# 修改主机名(node也做)
hostname k8s-master
bash

# 添加映射
vi /etc/hosts

# 写入
192.168.20.100 k8s-master
192.168.20.101 k8s-node1
192.168.20.102 k8s-node2

5.安装基础插件 

yum -y install wget vim net-tools telnet

6.关闭防火墙(永久关闭)

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
vi /etc/selinux/config

# 修改SELINUX
SELINUX=disabled

# 关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
或vi /etc/fstab

# 临时关闭命令
setenforce 0
swapoff -a

7.将桥接的 IPv4 流量传递到 iptables 的链

# 启用modprobe模块
modprobe overlay
modprobe br_netfilter

cat << EOF | tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

cat << EOF | tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

# 配置生效
sysctl --system

二、配置containerd仓库

1.添加阿里云仓库

# 添加仓库
dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 更新仓库(如遇失败再次更新即可)
dnf update

2.安装containerd

# 安装containerd
dnf -y install containerd

# 如遇安装失败先清除软件包缓存后重新安装
dnf clean packages

3.配置containerd

# 创建containerd配置文件目录
mkdir -p /etc/containerd

# 生成 containerd 的默认配置文件并保存
containerd config default | tee /etc/containerd/config.toml

# 修改containerd配置文件
vi /etc/containerd/config.toml

# 查找 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 修改 SystemdCgroup

SystemdCgroup = true

# 查找sandbox_image = "registry.k8s.io/pause:3.8" 修改 sandbox_image
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"

# 重启生效并加入自启动
systemctl restart containerd
systemctl enable containerd

三、部署k8s集群

1.添加Kubernetes仓库

# 添加Kubernetes仓库
vi /etc/yum.repos.d/kubernetes.repo

# 添加以下内容
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

# 更新仓库
dnf update

# 安装 Kubernetes modules
dnf -y install kubelet kubeadm kubectl

# 设置开机自启动
systemctl enable kubelet

2.创建containerd的crictl配置文件

# 创建containerd的crictl配置文件
tee /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF

# 验证连接
crictl images

3.修改containerd源(国内源)

# 备份当前配置
cp /etc/containerd/config.toml /etc/containerd/config.toml.bak

# 添加 DaoCloud 镜像配置
# 找到[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
# 添加以下内容

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://docker.m.daocloud.io"]

# 重启 containerd
systemctl restart containerd

# 拉取镜像测试
crictl pull nginx:latest

成功如下图: 

 4.初始化(master)

# 初始化
kubeadm init \
--apiserver-advertise-address=192.168.20.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.28.15 \
--pod-network-cidr=10.244.0.0/16 \
--control-plane-endpoint=k8s-master

# 将输出的kubeadm join复制

# token忘记或遗忘
kubeadm token create --print-join-command

# 初始化失败后先清除再初始化
kubeadm reset -f
rm -rf $HOME/.kube

 5.配置认证

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

 6.node加入集群

# 使用复制的kubeadm join命令在node1及node2节点直接运行即可
kubeadm join k8s-master:6443 --token ts3kay.xqjvqid8zpe962lx \
	--discovery-token-ca-cert-hash sha256:ed3fa45c084cbefc7459c7b9404623b786187293fbee9f41706fe57c61d06693

 7.配置node节点认证

# node1和node2节点创建集群目录
mkdir -p $HOME/.kube

# 将master节点的配置复制到从节点
scp $HOME/.kube/config root@k8s-node1:~/.kube/config
scp $HOME/.kube/config root@k8s-node2:~/.kube/config
scp /etc/kubernetes/admin.conf root@k8s-node1:/etc/kubernetes/
scp /etc/kubernetes/admin.conf root@k8s-node2:/etc/kubernetes/

# 修改node1和node2的ROLES标签
kubectl label node k8s-node1 kubernetes.io/role=worker1
kubectl label node k8s-node2 kubernetes.io/role=worker2

四、安装网络插件(flannel) 

1.安装网络插件(三台节点均作)

# 将pod网络加入集群(三台均作)
kubectl apply -f https://cdn.jsdelivr.net/gh/flannel-io/flannel@master/Documentation/kube-flannel.yml

# 无法使用更换链接
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# 查看flannel配置是否安装成功
ls /etc/cni/net.d/

# 如为空进行手动配置
cat <<EOF > /etc/cni/net.d/10-flannel.conflist
{
  "name": "cbr0",
  "cniVersion": "0.3.1",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}
EOF

2.查看节点状态

kubectl get nodes

结果如下图: 

五、部署kubernetes-dashboard(master)

1.获取资源配置文件

# 获取资源配置文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml

# 无法下载更换此链接
wget https://cdn.jsdelivr.net/gh/kubernetes/dashboard@v2.7.0/aio/deploy/recommended.yaml

# 都无法使用上述任一链接在浏览器输入
# 将内容复制至recommended.yaml

2.编辑资源配置文件

# 进入配置文件
vi recommended.yaml

# 显示行号
:set number

# 定位到39行,修改其提供的service资源
# 添加NodePort端口
type: NodePort
nodePort: 31000

示例: 

3.部署pod应用 

kubectl apply -f recommended.yaml

4. 创建admin-user账户及授权资源配置文件

cat > dashboard-adminuser.yml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
    name: admin-user
    namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
    name: admin-user
roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
EOF

5.创建资源实例

kubectl create -f dashboard-adminuser.yml

6.查看web镜像状态

kubectl get pods -n kubernetes-dashboard

示例:

7.获取账户admin-user的Token用于登录

kubectl create token admin-user  --namespace kube-system

8.访问web端

浏览器输入:https://192.168.20.100:31000

六、常见错误

1.web镜像状态错误(网络插件问题)

根据错误提示说明subnet.env缺失

# 修复
ls /run/flannel/subnet.env

# 如返回为空则新建并添加内容(所有节点)
vi /run/flannel/subnet.env

# 添加以下内容
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

# 修改权限
chmod 777 /run/flannel/subnet.env

# 重启并添加自启动
systemctl restart kubelet
systemctl enable kubelet

# 再次查看
kubectl get pods -n kubernetes-dashboard

 2.虚拟机重启后出现证书过期

Unable to connect to the server: tls: failed to verify certificate: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes") 

# 备份旧配置
mkdir -p ~/k8s-backup
sudo cp -r /etc/kubernetes/ ~/k8s-backup/

# 重新生成kubeconfig
sudo kubeadm init phase kubeconfig all

# 更新用户配置
cp /etc/kubernetes/admin.conf ~/.kube/config

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐