参考文章
知乎安装部署kubernetes
kubernetes中文社区
kubeadm init 遇到问题解决

1.系统准备

查看系统版本

cat /etc/centos-release

2023-11-06T10:44:40.png

2.添加阿里云

 rm -rfv /etc/yum.repos.d/*
 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3.配置主机名

vi /etc/hosts
192.168.14.214 master1.ctfclub.cn master1
hostnamectl set-hostname master1

4.关闭swap分区

swapoff -a 
vi /etc/fstab

注释swap那一行

5.配置核心参数传递

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
modprobe br_netfilter
sysctl -p  /etc/sysctl.d/k8s.conf

Network Filter Call(网络过滤器调用) 打开桥接防火墙

6.安装环境包

 yum install vim bash-completion net-tools gcc -y

7.aliyun源安装docke,CRI

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install containerd.io -y
yum install docker-ce -y

CRI是kubelet和容器运行时之间通信的主要协议,启动需要!
如报 docker-ce-24.0.7-1.el7.x86_64.rpm 错误则

wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-24.0.7-1.el7.x86_64.rpm
yum install docker-ce-24.0.7-1.el7.x86_64.rpm
yum -y install docker-ce
systemctl restart docker

8.配置containter

containerd config default > /etc/containerd/config.toml

修改 /etc/containerd/config.toml 为

sandbox_image = " registry.aliyuncs.com/google_containers/pause:3.6"
systemctl daemon-reload
systemctl restart containerd
systemctl enable containerd

9.设置docker加速

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fl791z1h.mirror.aliyuncs.com"]
}
EOF

docker info
systemctl daemon-reload
systemctl restart docker


10.安装kubectl、kubelet、kubeadm

添加阿里kubernetes源

cat >> /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装

yum install kubectl kubelet kubeadm
systemctl enable kubelet

11.配置 crictl

crictl和ctr
crictl是一个用于CRI兼容的容器运行时进行交互的命令行工具,可以用来管理和监控运行中的容器,例如创建,删除和暂停容器,查看容器的状态等。
ctr也是一个用于containerd交互的命令行工具,它可以用来管理和监控containerd中运行的容器和镜像,例如创建,删除和暂停容器,上传和下载镜像等,因为ctr时containerd自带的cli命令行工具crictl是k8s自带的所以ctr默认连接就是containerd的sock。
crictl默认连接到unix:///var/run/dockershim.sock所以当底层容器为containerd时则需要修改其连接的sock。

crictl config runtime-endpoint unix:///run/containerd/containerd.sock

12.使用kubeadm初始化集群

先停止防火墙

systemctl stop firewalld 
systemctl disable firewalld

内核防火墙临时关闭

getenforce 0

内核防火墙永久关闭

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

开启路由功能

sysctl -w net.ipv4.ip_forward=1

开始初始化

kubeadm init --kubernetes-version=v1.28.2  --image-repository registry.aliyuncs.com/google_containers --v=5  --control-plane-endpoint "192.168.14.214:6443"  --upload-certs  --service-cidr=10.96.0.0/12  --pod-network-cidr=10.244.0.0/16

13.初始化日志分析:

日志文件:/var/lib/etcd /var/lib/kubernetes /var/lib/kubelet (pki 中的 kubelet-client-current.pem 证书)
k8s初始化日志文件.txt

设置了 版本,公告地址,仓库地址 服务ip pod 范围

13.1 文件夹/etc/kubernetes

包含了Kubernetes集群的配置文件和密钥等敏感信息
其中:
/etc/kubernetes/mainifest是清单文件夹包括了api,调度,控制,etcd(存储集群的状态数据和配置信息),这些组件在 Kubernetes 集群中应如何部署和操作。

/etc/kubernetes/pki 是证书文件夹,提供了各个组件的证书,如 etcd(文件夹内有多个证书),apiserver,apiserver-etcd-client(apiserver与etcd通信证书),apiserver-kubelet-client(apiserver与kubelet通信证书),ca(根证书),sa(服务账号,如defualt,kube-system,kube-proxy,kube-dns),front-proxy-ca(前置代理证书),front-proxy-client(前置代理与apiserver通信证书)

/etc/kubernetes下的admin.conf,crontroller-manage.conf,kubelet.conf scheduler.conf
admin.conf是Kubernetes管理员的配置文件,里面有账密,证书等

crontroller-manage.conf是Kubernetes控制器管理器组件的配置文件,包括
2023-11-08T06:49:57.png
stateful service 即有状态服务,数据可以通过挂载卷的方式存储在本地,实例只能为1。
stateless service 即无状态服务,数据存储在容器中,实例可以为多个。

kubelet.conf kubelet是每个节点上的代理,负责管理节点上的容器和与控制平面的通信等
scheduler.conf sheduler是调度器组件的配置文件。调度器负责根据资源需求和调度策略,将Pod分配到集群中的节点上

13.2 /var/lib/etcd

在 Kubernetes (k8s) 中,/var/lib/etcd 是用于存储 etcd 数据库的目录。etcd 是一个密钥值存储系统,被初始化 Kubernetes 集群的数据库,用于存储集群的状态和配置信息。集群重启恢复之前的状态,依赖的就是它。
备份就在这里

13.3/var/lib/kubelet

目录用于存储 kubelet 的运行时数据,管理容器用的。
重要的目录有pods和pki
pods 包括记录了容器的日志,状态等
pki 中的证书
kubelet.crt:用于验证kubelet与Kubernetes等组件之间的通信。
kubelet-client.pem:用于加密kubelet与API服务器之间的通信

13.4

通信图如图所示:
2023-11-08T07:28:38.png
kubectl get cm -n kube-system kubeadm-config -o yaml

14.创建kubectl

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

打开命令补全

source <(kubectl completion bash)

解锁master调度

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

15.安装calico网络

2023-11-07T08:06:14.png
calico.txt

kubectl apply -f calico.yaml

2023-11-07T08:14:46.png

!calico装上之后,coredns才不会pending,节点才会 ready

16.添加dashborad

16.1下载

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

dashboard.txt

16.2 修改对外暴露端口

2023-11-07T08:26:04.png

16.3提前安装所需镜像

docker pull docker.io/kubernetesui/dashboard-web:v1.0.0
docker pull docker.io/kubernetesui/dashboard-api:v1.0.0
docker pull docker.io/kubernetesui/metrics-scraper:v1.0.9

16.4 部署

kubectl  apply  -f  dashboard.txt

16.5创建用户

vim dashboard-adminuser.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

kubectl apply -f dashboard-adminuser.yaml

16.6 绑定集群角色

vim dashboard-clusterrolebinding.yaml

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 dashboard-clusterrolebinding.yaml

16.7 获取token

kubectl -n kubernetes-dashboard create token admin-user

16.8 登陆控制台

17.添加节点

17.1
要在所有节点及其需要添加的节点上修改 /etc/hosts 并设置 节点名称

hostnamectl set-hostname node1

添加节点,即执行上述安装步骤,直到安装好了kubeadm,kubelet,kubectl,再执行
添加命令

最后修改:2023 年 11 月 16 日
如果觉得我的文章对你有用,请随意赞赏