Kubernetes集群的部署及配置

一、创建主机及基础配置

1.安装VMware

点击Fusion and Workstation | VMware

2.安装镜像

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

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

名称k8s-masterk8s-node1k8s-node2
内存4G4G4G
cpu2核2个2核2个2核2个
硬盘60G60G60G
IP192.168.20.100192.168.20.101192.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

Kubernetes指南-倪朋飞.pptx 1-唐继元Kubernetes Master High Availability 高级实践.pdf 2、刘淼-基于 DevOps、微服务及k8s的高可用架构探索与实现.pdf ArchSummit北京2016-《网易蜂巢基于万节点Kubernets支撑大规模云应用实践》-刘超.pdf Azure Service Broker_cn - Rita Zhang.pdf google/ HPE李志霄 Kubernetes企业级容器云:加速数字创新-20170407.pdf IBM马达:Kubernetes 中基于策略的资源分配.pdf k8s资料.rar Kubernetes Cookbook-Packt Publishing(2016).pdf Kubernetes Microservices with Docker-Apress2016.pdf Kubernetes on Azure - Gabe Monroy.pdf Kubernetes1.6集群部署完全指南——二进制文件部署开启TLS基于CentOS7.pdf Kubernetes1-4版本新增加功能介绍.pdf Kubernetes监控与日志.pdf kubernetes容器云平台实践-李志伟v1.0.pdf Kubernetes生态系统现状报告.pdf Kubernetes下API网关的微服务实践 长虹集团-李玮演讲PPT.pdf Kubernetes与EcOS的碰撞结合 成都精灵云-张行才演讲PPT.pdf Kubernetes与OpenStack融合支撑企业级微服务架构.pdf Kubernetes在华为全球IT系统中的实践.pdf Kubernetes在企业中的场景运用及管理实践.pdf Kubernetes指南-倪朋飞.pdf Kubernetes指南-倪朋飞.pptx l.txt Lessons+learned+and+challenges+faced+while+running+Kubernetes+at+scale.pdf rkt与Kubernetes的深度融合.pdf rkt与Kubernetes的深度融合.pptx SACC2017FabricOnKubernetesChinese.pdf ThoughtWorks林帆-白话Kubernetes网络.pdf 百度云PaddlePaddle on kubernetes-周倜.pdf 从Borg到Kubernetes-PaaS产品设计-华为-钟成.pdf 改造Kuberntetes打造SAE容器云.pdf 跟谁学-基于容器的持续集成平台建设.pdf 谷歌深度学习在Kubernetes上的实践.pptx 惠普基于Kubernetes容器私有云平台实践.pdf 基于Kubernetes的模板化应用编排.pdf 基于kubernetes容器云平台设计与实践-邓德源.pdf 基于Kubernetes的私有容器云建设实践-易宝支付.pdf 基于Kubernetes构建AI业务生态.pdf 李波:小米生态云应用引擎实践.pdf 魅族容器云平台基于 k8s 的自动化运维实践-曾彬.pdf 欧昌华-基于 Nginx 的负载均衡器在 K8S 中的实践.pdf 彭超:瓜子云的落地.pdf 如何落地TensorFlow on Kubernetes.pdf 如何用OpenStack和Kubernetes快速搭建一个容器和虚拟机组合服务的云平台.pptx 孙杰:大型企业云平台架构演进的实践之路.pdf 微服务道与术-敖小剑.pdf 微软Azure云助力微服务-赵文婧.pdf 颜卫-腾讯云容器服务基于kubernetes的应用编排实践-final-v1.0.pptx 有容云邓绍军-Kubernetes落地实践.pptx 折800如何用Docker&Kubernetes;构建自动化测环境.pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值