k8s折腾笔记

k8s折腾笔记

k8s安装、部署、运行demo

1.系统环境

两台服务器,都是ubuntu22版本,

一台2核4g,作为master节点

一台2核2g,作为worker节点

两台机器都需要先安装好docker

两台都需要在安全组或者防火墙处开放端口

Master 节点:

TCP: 6443 (Kubernetes API)

TCP: 2379-2380 (etcd)

TCP: 10250 (kubelet)

Worker 节点:

TCP: 10250 (kubelet)

TCP: 30000-32767 (NodePort 服务)

2.开始安装

2.1 先从master节点开始

确保每台机器有唯一的主机名,例如:

Master 节点:master

Worker 节点:worker

bash 复制代码
hostnamectl set-hostname master  # 在 Master 上执行
hostnamectl set-hostname worker  # 在 Worker 上执行

禁用 Swap

bash 复制代码
sudo swapoff -a

配置 /etc/hosts 文件,添加两台机器的 IP 和主机名映射

这里是我的ip地址,内网,也可以直接改为你的公网ip

bash 复制代码
192.168.*.* master
192.168.*.* worker

运行以下命令进行安装,以下来自官网

更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
下载用于 Kubernetes 软件包仓库的公共签名密钥。所有仓库都使用相同的签名密钥,因此你可以忽略URL中的版本:
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
添加 Kubernetes apt 仓库。 请注意,此仓库仅包含适用于 Kubernetes 1.31 的软件包; 对于其他 Kubernetes 次要版本,则需要更改 URL 中的 Kubernetes 次要版本以匹配你所需的次要版本 (你还应该检查正在阅读的安装文档是否为你计划安装的 Kubernetes 版本的文档)。

# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

运行完成命令之后你现在应该有了初步的环境,

之后执行

bash 复制代码
kubeadm init

然后k8s会提示你进行以下设置

bash 复制代码
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

使用下面这条命令获取加入集群的密钥

bash 复制代码
kubeadm token create --print-join-command

初始化后,必须安装一个网络插件(如 Flannel 或 Calico)才能使 Pod 通信正常。以 Flannel 为例:

bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml```

之后,输入下面这段命令便可以查看集群节点

bash 复制代码
kubetcl get nodes 
kubectl get pods -n kube-system

2.2 worker节点

配置 /etc/hosts 文件,添加两台机器的 IP 和主机名映射

bash 复制代码
192.168.*.* master
192.168.*.* worker

运行以下命令进行安装,以下来自官网

更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
下载用于 Kubernetes 软件包仓库的公共签名密钥。所有仓库都使用相同的签名密钥,因此你可以忽略URL中的版本:
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
添加 Kubernetes apt 仓库。 请注意,此仓库仅包含适用于 Kubernetes 1.31 的软件包; 对于其他 Kubernetes 次要版本,则需要更改 URL 中的 Kubernetes 次要版本以匹配你所需的次要版本 (你还应该检查正在阅读的安装文档是否为你计划安装的 Kubernetes 版本的文档)。

# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

然后执行

从master节点处返回的命令加入节点,之后,你就可以在master处看见它们了

bash 复制代码
kubeadm join 10.3.4.4:6443 --token dqwbkx.max1******* --discovery-token-ca-cert-hash sha256:87c13dfb43e27de3afd8e0c8e62a8fc742**********

到处,应该算连接完成了,下面讲一讲会遇到的问题,

3.遇到的问题

这是在worker节点执行了安装网络插件的错误,应该是在master节点上执行,萌新错误(例如我)

两种情况,第一种,master节点的网络插件没安装,第二种,在etc/hosts的ip配置失效

执行加入节点的命令需要root权限

其实遇到最多的就是各种源的安装错误,参考网络上的教程会出现各种提示密钥过期,apt等等问题,最好是参考官方的网站上设置源

如果遇到无法下载这些问题,可以考虑设置一个国内的镜像源

4.集群demo

实验目标:使用k8s部署一个三个pod的nginx集群

步骤 1: 创建一个 NGINX 部署

创建一个 YAML 文件,例如 nginx-deployment.yaml,内容如下:

bash 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

应用这个部署文件:

bash 复制代码
kubectl apply -f nginx-deployment.yaml

检查部署状态:

bash 复制代码
kubectl get deployments
kubectl get pods

步骤 2: 暴露 NGINX 服务

创建一个 Service,以便对外暴露 NGINX。

创建一个 YAML 文件,例如 nginx-service.yaml,内容如下:

bash 复制代码
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30007
  type: NodePort

应用这个服务文件:

bash 复制代码
kubectl apply -f nginx-service.yaml

检查服务状态:

bash 复制代码
kubectl get services

输出应该包含类似以下的内容:

bash 复制代码
NAME            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
nginx-service   NodePort   10.96.243.127    <pending>     80:30290/TCP   10s

其中 nodePort 是 Kubernetes 在节点上暴露的端口,可以选定范围在 30000-32767 之间。

bash 复制代码
kubectl apply -f nginx-service.yaml

现在可以通过公网ip地址访问啦!

不管是master节点的地址还是worker节点的地址都可以

相关推荐
xidianjiapei0011 小时前
Kubernetes的Ingress 资源是什么?
云原生·容器·kubernetes
电棍2331 小时前
verilog笔记
笔记·fpga开发
让我安静会1 小时前
Obsidian·Copilot 插件配置(让AI根据Obsidian笔记内容进行对话)
人工智能·笔记·copilot
sszdzq2 小时前
Docker
运维·docker·容器
世事如云有卷舒2 小时前
FreeRTOS学习笔记
笔记·学习
dmy3 小时前
docker 快速构建开发环境
后端·docker·容器
土豆沒加4 小时前
K8S的Dashboard登录及验证
云原生·容器·kubernetes
终端行者5 小时前
kubernetes1.28部署mysql5.7主从同步,使用Nfs制作持久卷存储,适用于centos7/9操作系统,
数据库·容器·kubernetes
羊小猪~~5 小时前
MYSQL学习笔记(九):MYSQL表的“增删改查”
数据库·笔记·后端·sql·学习·mysql·考研
yuanbenshidiaos5 小时前
【数据挖掘】数据仓库
数据仓库·笔记·数据挖掘