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/
相关推荐
虾..6 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙6 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
hkhkhkhkh1238 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
HZero.chen9 小时前
Linux字符串处理
linux·string
张童瑶9 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
汪汪队立大功12310 小时前
什么是SELinux
linux
石小千10 小时前
Linux安装OpenProject
linux·运维
柏木乃一10 小时前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程
Lime-309010 小时前
制作Ubuntu 24.04-GPU服务器测试系统盘
linux·运维·ubuntu
百年渔翁_肯肯10 小时前
Linux 与 Unix 的核心区别(清晰对比版)
linux·运维·unix