k8s折腾笔记
- k8s安装、部署、运行demo
- 1.系统环境
- 2.开始安装
- 2.1 先从master节点开始
- 2.2 worker节点
- 3.遇到的问题
- 4.集群demo
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
hostnamectl set-hostname master # 在 Master 上执行
hostnamectl set-hostname worker # 在 Worker 上执行
禁用 Swap
sudo swapoff -a
配置 /etc/hosts 文件,添加两台机器的 IP 和主机名映射
这里是我的ip地址,内网,也可以直接改为你的公网ip
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
运行完成命令之后你现在应该有了初步的环境,
之后执行
kubeadm init
然后k8s会提示你进行以下设置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
使用下面这条命令获取加入集群的密钥
kubeadm token create --print-join-command
初始化后,必须安装一个网络插件(如 Flannel 或 Calico)才能使 Pod 通信正常。以 Flannel 为例:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml```
之后,输入下面这段命令便可以查看集群节点
kubetcl get nodes
kubectl get pods -n kube-system
2.2 worker节点
配置 /etc/hosts 文件,添加两台机器的 IP 和主机名映射
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处看见它们了
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,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
应用这个部署文件:
kubectl apply -f nginx-deployment.yaml
检查部署状态:
kubectl get deployments
kubectl get pods
步骤 2: 暴露 NGINX 服务
创建一个 Service,以便对外暴露 NGINX。
创建一个 YAML 文件,例如 nginx-service.yaml,内容如下:
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80nodePort: 30007type: NodePort
应用这个服务文件:
kubectl apply -f nginx-service.yaml
检查服务状态:
kubectl get services
输出应该包含类似以下的内容:
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 之间。
kubectl apply -f nginx-service.yaml
现在可以通过公网ip地址访问啦!
不管是master节点的地址还是worker节点的地址都可以