Hyper-V + Centos stream 9 搭建K8s集群(二)

一、安装自动补全

主节点安装就可以

复制代码
yum install -y bash-completion
echo 'source <(kubectl completion bash)' >>~/.bashrc
kubectl completion bash >/etc/bash_completion.d/kubectl

二、安装Calico网络插件(主节点)

下载文件

复制代码
wget https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml

修改配置文件

复制代码
sed -i 's#docker.io#m.daocloud.io/docker.io#g' calico.yaml

如果你没有进行某些自定义安装,可以直接应用

复制代码
kubectl apply -f calico.yaml

然后耐心等待(有可能因为网络问题拉镜像失败),可以不断查看空间kube-system下的所有Pod(最终正常应该都是running)

复制代码
kubectl get pods -n kube-system

查看Calico插件在各节点的部署情况(正常应该都是running)

复制代码
kubectl get po -A -o wide | grep calic

查看集群状态

复制代码
kubectl get nodes -A

正常应该都是Ready的状态了。

三、安装Kubernetes Dashboard

1、安装

Helm 更适合生产环境,kubectl apply 更适合学习和简单部署。

(1)方式1-基于helm安装

我是用这种方式遇到问题,懒得研究,就卸载了直接使用**kubectl安装了。**

复制代码
# 下载helm
wget https://get.helm.sh/helm-v3.16.1-linux-amd64.tar.gz

# 解压
tar zxf helm-v3.16.1-linux-amd64.tar.gz

# 移动到/usr/local
mv linux-amd64/helm /usr/local/bin/helm && rm -rf linux-amd64

# 加一个chart 仓库,这里用的阿里云
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

# 查看列表
helm search repo aliyun 

Helm 仓库的核心作用​是​集中化管理 Charts,存储预定义的 Kubernetes 应用模板(如 MySQL、Nginx、Redis 的部署配置)。类似 apt/yum 的软件源,但针对的是 Kubernetes 应用。

通过 helm install 快速部署应用,无需手动编写复杂的 YAML 文件。

比如

复制代码
helm install my-mysql aliyun/mysql

添加仓库

复制代码
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/

使用kubernetes仪表板图表部署名为"kubernetes仪表板"的Helm Release

复制代码
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard

设置访问端口

复制代码
kubectl edit svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard

修改service的type类型为NodePort,使其可以外部访问,修改之后查看结果

复制代码
kubectl -n kubernetes-dashboard get svc

(2)方式2-直接使用 kubectl安装

下载配置文件

复制代码
https://github.com/kubernetes/dashboard/blob/v2.0.0-beta4/aio/deploy/recommended.yaml

下载完修改这个文件,找到镜像文件修改为国内的源

复制代码
image: registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.7.0
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.8

然后进行应用

复制代码
kubectl apply -f recommended.yaml

有几种方式可以访问,这里选择NodePort

复制代码
kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}'

查看服务状态

复制代码
kubectl -n kubernetes-dashboard get svc kubernetes-dashboard

kubectl get svc -n kubernetes-dashboard

2、创建访问账号

编辑文件添加内容

复制代码
vim /etc/kubernetes/dashadm.yaml

添加下面的内容

复制代码
#创建服务帐户
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
#创建群集角色绑定
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: kubernetes-dashboard

使其生效

复制代码
kubectl apply -f /etc/kubernetes/dashadm.yaml

获取访问令牌的token的命令

复制代码
kubectl -n kubernetes-dashboard create token admin-user

3、生成token进行登录

生成token

复制代码
kubectl -n kubernetes-dashboard create token admin-user

进行登录

复制代码
https://172.25.116.101:31874/

使用token登录

4、遇到问题可以重新部署

如果是镜像拉取的问题,可以使用这个命令查看

复制代码
kubectl describe pod -n kubernetes-dashboard

首先清理现有的错误 Pod

复制代码
kubectl delete deployment --all -n kubernetes-dashboard

然后删除

复制代码
kubectl delete namespace kubernetes-dashboard

然后重新部署

复制代码
kubectl create namespace kubernetes-dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

四、部署测试

我们创建一个nginx.yaml,随便放在哪里。

添加如下内容

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app.kubernetes.io/name: MyApp
spec:
  containers:
  - name: nginx
    image: ccr.ccs.tencentyun.com/library/nginx:latest
    ports:
      - containerPort: 80
        name: http-web-svc
---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    # 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。
    - port: 80
      targetPort: 80
      # 可选字段
      # 默认情况下,为了方便起见,Kubernetes 控制平面会从某个范围内分配一个端口号
      #(默认:30000-32767)
      nodePort: 30007

然后应用

复制代码
kubectl apply -f nginx.yaml

查看状态

复制代码
kubectl get pod,svc

访问这个地址

复制代码
http://172.25.116.101:30007/
相关推荐
原来是猿5 小时前
网络计算器:理解序列化与反序列化(中)
linux·运维·服务器·网络·tcp/ip
Cat_Rocky6 小时前
k8s-持久化存储,粗浅学习
java·学习·kubernetes
AOwhisky6 小时前
虚拟化技术学习笔记
linux·运维·笔记·学习·虚拟化技术
rabbit_pro7 小时前
Docker compose部署Ollama使用模型
linux·运维·docker
ILL11IIL8 小时前
k8s的pod管理及优化
云原生·容器·kubernetes
Irissgwe9 小时前
六、Ext系列文件系统(2.核心原理与应用)
linux·分区··inode·软硬连接·路径缓存·ext系列文件
tkevinjd10 小时前
wsl2安装
linux·wsl·虚拟机·wsl2
故事还在继续吗10 小时前
Linux 内核模块开发实战
linux·linux内核
南境十里·墨染春水11 小时前
linux学习进展 守护进程
linux·服务器·学习
REDcker11 小时前
Android HWASan 详解:硬件标记原理、Clang 启用与排障实践
android·linux·debug·编译·clang·asan·hwasan