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节点的地址都可以

相关推荐
云上艺旅16 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
c无序16 小时前
【Docker-7】Docker是什么+Docker版本+Docker架构+Docker生态
docker·容器·架构
FixBug_Nick16 小时前
使用Docker安装及使用最新版本的Jenkins
docker·容器·jenkins
吴梓穆17 小时前
UE5学习笔记 FPS游戏制作38 继承标准UI
笔记·学习·ue5
ghostwritten18 小时前
Run Milvus in Kubernetes with Milvus Operator
容器·kubernetes·milvus
Zero_to_zero123418 小时前
解决docker的ubuntu系统中文乱码问题
ubuntu·docker·容器
@郭小茶18 小时前
docker-compose方式部署docker项目
运维·docker·容器
V---scwantop---信18 小时前
英文字体:大胆都市街头Y2Y涂鸦风格品牌海报专辑封面服装字体 Chrome TM – Graffiti Font
笔记·字体
Moonnnn.18 小时前
运算放大器(四)滤波电路(滤波器)
笔记·学习·硬件工程
吴梓穆19 小时前
UE5学习笔记 FPS游戏制作37 蓝图函数库 自己定义公共方法
笔记·学习·ue5