kubernets 简介
Kubernetes (通常称为"k8s")是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它最初由Google设计并开发,并于2014年向开源社区发布。现在,它由Cloud Native Computing Foundation (CNCF)托管,成为了云原生应用的事实标准。
Kubernetes提供了一个可扩展的、模块化的平台,可以在不同的环境中运行应用程序,包括公有云、私有云和混合云。它支持多种容器运行时,如Docker、rkt和CRI-O等,并提供了多种功能,如自动负载均衡、自动伸缩、自动容错、自动部署、自动扩展等。
-
Kubernetes的核心组件包括:
- Master节点: 用于管理整个集群,包括调度、监控、扩展和升级等任务。
- Worker节点: 运行应用程序的主机。
- Pod: 最小的可部署单元,由一个或多个容器组成,用于运行应用程序。
- ReplicaSet: 用于在多个Worker节点上运行多个相同的Pod副本,并确保它们在任何时间都可用。
- Deployment: 用于定义和管理ReplicaSet,提供了自动部署和更新的功能。
- Service: 用于暴露Pod的网络端点,使其可以被其他应用程序访问。
Kubernetes提供了一个强大的API,可以使用命令行工具(如kubectl)、Web界面或编程接口进行访问和操作。它还支持扩展机制,可以通过插件、自定义资源定义(CRD)和控制器等方式扩展其功能。
-
Kubernetes的优点包括:
- 自动化:自动化部署、扩展和管理应用程序。
- 可移植性:支持多云环境和不同的容器运行时。
- 可扩展性:支持扩展插件和自定义资源定义。
- 稳定性:具有高可用性和容错性,可以确保应用程序始终可用。
- 社区:Kubernetes具有强大的社区支持,可以获取大量的文档、示例和工具。
Kubernetes是一个强大的容器编排平台,可以帮助企业实现自动化部署、可移植性和可扩展性,从而加速应用程序的交付和提高运维效率。
在Ubuntu 18.04 上安装 k8s
在 Ubuntu 18.04 上安装 Kubernetes 可以通过以下步骤进行:
- 安装docker
sudo apt-get remove docker docker-engine docker.io containerd runc
curl -sSL https://get.daocloud.io/docker | sh
#通过将用户添加到docker用户组可以将sudo去掉
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
#修改国内源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info|grep Mirrors -A 2
- 安装k8s
# 可以打开 /etc/apt/sources.list 文件,添加一行
vim /etc/apt/sources.list
# 添加 deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
# 为新源添加 key
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
# 安装 k8s
sudo apt-get update && apt-get install -y apt-transport-https curl
sudo apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated
# 开启kubelet
systemctl enable kubelet
# 关闭swap
sudo swapoff -a
### kubernetes 1.24+版本之后,docker必须要加装cir-docker, 1.26.X cir-docker至少要v0.3.0
git clone https://github.com/Mirantis/cri-dockerd.git
cd cri-dockerd
mkdir bin
# go 安装 https://go.dev/doc/install 官网下载 按步骤执行即可
wget https://go.dev/dl/go1.20.2.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.20.2.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version
# 继续编译 cri-dockerd
go build -o bin/cri-dockerd
mkdir -p /usr/local/bin
install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
cp -a packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
## 需要追加–network-plugin=cni,通过该配置告诉容器,使用kubernetes的网络接口。
#vim /etc/systemd/system/cri-docker.service
# 启动
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
systemctl start docker
systemctl start cri-docker
# 验证
systemctl status cri-docker
kubeadm 初始化
# 提前拉取 初始化 需要的 docker镜像
#编写shell
vim pullk8s.sh
# 提前通过 kubeadm config images list 查看镜像版本,修改为对应的版本
#!/bin/bash
docker pull dyrnq/kube-apiserver:v1.26.2
docker pull dyrnq/kube-controller-manager:v1.26.2
docker pull dyrnq/kube-scheduler:v1.26.2
docker pull dyrnq/kube-proxy:v1.26.2
docker pull dyrnq/pause:3.9
docker pull dyrnq/pause:3.6
docker pull dyrnq/etcd:3.5.6-0
docker pull dyrnq/coredns:v1.9.3
docker tag dyrnq/kube-apiserver:v1.26.2 registry.k8s.io/kube-apiserver:v1.26.2
docker tag dyrnq/kube-controller-manager:v1.26.2 registry.k8s.io/kube-controller-manager:v1.26.2
docker tag dyrnq/kube-scheduler:v1.26.2 registry.k8s.io/kube-scheduler:v1.26.2
docker tag dyrnq/kube-proxy:v1.26.2 registry.k8s.io/kube-proxy:v1.26.2
docker tag dyrnq/pause:3.9 registry.k8s.io/pause:3.9
docker tag dyrnq/pause:3.6 registry.k8s.io/pause:3.6
docker tag dyrnq/etcd:3.5.6-0 registry.k8s.io/etcd:3.5.6-0
docker tag dyrnq/coredns:v1.9.3 registry.k8s.io/coredns/coredns:v1.9.3
docker rmi dyrnq/kube-apiserver:v1.26.2
docker rmi dyrnq/kube-controller-manager:v1.26.2
docker rmi dyrnq/kube-scheduler:v1.26.2
docker rmi dyrnq/kube-proxy:v1.26.2
docker rmi dyrnq/pause:3.9
docker rmi dyrnq/pause:3.6
docker rmi dyrnq/etcd:3.5.6-0
docker rmi dyrnq/coredns:v1.9.3
# 保存后执行
sudo chmod -x pullk8s.sh
sh pullk8s.sh
初始化
修改docker为cgroup driver
vim /etc/docker/daemon.json
#添加
"exec-opts": ["native.cgroupdriver=systemd"]
kubeadm 初始化
# apiserver-advertise-address 改为主机地址
kubeadm init --apiserver-advertise-address=192.168.131.139 --pod-network-cidr=10.244.0.0/16 --cri-socket=unix:///var/run/cri-dockerd.sock --ignore-preflight-errors=NumCPU
#集群应用客户端管理集群文件准备
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
ls /root/.kube/
#网络配置
export KUBECONFIG=/etc/kubernetes/admin.conf
# 使用flannel网络插件
kubectl apply -f https://raw.fastgit.org/coreos/flannel/master/Documentation/kube-flannel.yml
#等待node 准备完成
watch kubectl describe node master
# 准备完成后,可见 status 变为 Ready
kubectl get nodes
# 从机加入集群
kubeadm join 192.168.131.139:6443 --token e3d8tx.b7vplejpobjcuegh \
--discovery-token-ca-cert-hash sha256:3aa8cd847b072edbb4af624d65023e7e6c9e8dabf8c9e4d891235512aefdf186
安装 kubernetes-dashboard
https://gitcode.net/mirrors/kubernetes/dashboard?utm_source=csdn_github_accelerator
kubeadm 初始化重置
如果需要重新初始化(reset)一个已经存在的Kubernetes集群,可以使用以下命令:
sudo kubeadm reset
这个命令会将当前节点上的Kubernetes组件、Pod、配置文件等清除,恢复到初始化之前的状态。如果需要在重新初始化之前删除集群的配置文件,可以使用以下命令:
sudo rm -rf /etc/kubernetes/
这个命令会删除Kubernetes集群的配置文件,包括/etc/kubernetes
目录下的所有文件和子目录。删除之后,你可以重新执行kubeadm init
命令来初始化Kubernetes集群。
找出占用端口10250
的进程,并停止这些进程,使用以下命令找出占用端口10250
的进程:
sudo lsof -i :10250
然后根据输出结果找出占用端口10250
的进程ID(PID),并使用kill
命令停止些进程,例如:
sudo kill <PID>
kubelet 监控
journalctl -f -u kubelet
报错检查
journalctl -u kubelet | grep E0309