首页 > 系统相关 >linux安装k8s 单机版

linux安装k8s 单机版

时间:2024-02-21 13:56:23浏览次数:23  
标签:kube 单机版 kubernetes yum linux docker k8s root

一、 准备工作

1. 确认环境

swapoff -a  //关闭swap
setenforce 0 //临时关闭selinux

每台机器的ip和uuid不能一样

cat /sys/class/dmi/id/product_uuid        //每台机器的uuid不能相同
ifconfig -a   //ip不能相同

2.开放端口

协议    方向    端口范围    作用    使用者
TCP    入站    6443    Kubernetes API服务器    所有组件
TCP    入站    2379-2380    etcd 服务器客户端API    Kube-apiserver,etcd
TCP    入站    10250    Kubelet APT    Kubelet自身,控制平面组件
TCP    入站    10251    Kube-scheduler    Kube-scheduler自身
TCP    入站    10252    Kube-controller-manager    Kube-controller-manager自身
TCP    入站    8080    kubelet    Kubelet自身
TCP    入站    30000-32767    Node Port服务器    所有组件
端口号一定要安排明白!!!!否者会出现类似dial tcp 10.96.0.1:443: connect: no route to
host错误,如果测试环境一直弄不好,可以关闭防火墙。ps:及其不建议。

3.允许iptables检查桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system    初始化    

二、安装

1.安装kubeadm、kubelet、kubectl

添加镜像
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes] 
name=Kubernetes 
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 
enabled=1 
gpgcheck=0 
repo_gpgcheck=0 
EOF

#将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes  下载镜像
sudo systemctl enable --now kubelet 
//查看是否安装成功
kubeadm version
kubectl version --client
kubelet --version

2. 安装插件

yum -y install socat conntrack-tools

3. 部署docker

在服务器上准备在线镜像源,然后添加docker的镜像源,如果之前安装过需要先卸载。

#安装依赖包
[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2    
#添加华为云的docker镜像地址
[root@docker ~]# yum-config-manager --add-repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo

更新缓存,只处理新添加的yum源缓存
[root@docker ~]# yum makecache fast
#安装docker,默认安装最新版本
[root@docker ~]# yum -y install docker-ce
#查看安装docker版本
[root@docker ~]# docker --version(或者使用docker version)
Docker version 20.10.7, build f0df350
[root@docker ~]# systemctl start docker

4. 修改docker组件为systemd

sudo mkdir /etc/docker

cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
 
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

5. k8s拉取镜像

先查看要拉取的镜像

kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.22.2
k8s.gcr.io/kube-controller-manager:v1.22.2
k8s.gcr.io/kube-scheduler:v1.22.2
k8s.gcr.io/kube-proxy:v1.22.2
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4

写成脚本,版本根据自己的要求来写

vim k8s.sh

#!/bin/bash
images=(
    kube-apiserver:v1.22.2
    kube-controller-manager:v1.22.2
    kube-scheduler:v1.22.2
    kube-proxy:v1.22.2
    pause:3.5
    etcd:3.5.0-0
    coredns:v1.8.4
)
for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName} k8s.gcr.io/${imageName}
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
done

docker tag k8s.gcr.io/coredns:v1.8.4  k8s.gcr.io/coredns/coredns:v1.8.4
docker rmi k8s.gcr.io/coredns:v1.8.4

给脚本加权限
chmod -R 777 k8s.sh
执行脚本,默默的等待拉取
./k8s.sh
完了看镜像是否拉取成功
docker images

6. 安装启动

1. 修改主机映射(根据自己的ip设置)

vi /etc/hosts

在这里插入图片描述

2. 初始化服务(根据自己的ip和网段和版本来设置)

kubeadm init --apiserver-advertise-address=192.168.2.80 --pod-network-cidr=192.168.0.0/16 --kubernetes-version=v1.22.2 |tee kubeadmin-init.log


如果报错:

error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: time="2023-12-07T06:26:18Z" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"
, error: exit status 1
 

 


 vim /etc/containerd/config.toml 

更改 
  disabled_plugins = []

然后重启 systemctl restart containerd

再执行上面的初始化



出现一下字样就是初始化成功
在这里插入图片描述

3. 注意

要使非 root 用户可以运行 kubectl,请运行以下命令, 它们也是 kubeadm init 输出的一部分:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
或者,如果你是root 用户,则可以运行:
export KUBECONFIG=/etc/kubernetes/admin.conf
如果想重新初始化,可执行kubeadm reset

直接给它放到环境变量中,以免关闭服务器后重新启动出现访问不到8080端口这个问题。

vim /etc/profile

#放到最后面
export KUBECONFIG=/etc/kubernetes/admin.conf

7. 安装flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果出现Connecting to raw.githubusercontent.com refused,可以执行vi /etc/hosts
在后面添加199.232.96.133 raw.githubusercontent.com
在这里插入图片描述

8. 验证

kubectl get nodes

在这里插入图片描述

如果出现ready则代表安装完成,master节点已经注册到了k8s。

9. 异常处理

如果出现NotReady,可以执行以下语句判断服务器状态。
kubectl get nodes -o yaml
以下绿色部分没有问题,红色部分异常message:docker: network plugin is not ready: cni
config uninitialized。

在这里插入图片描述

如果出现以上问题 查看日志。

journalctl -f -u kubelet.service

如果出现以下日志。

"Error validating CNI config list" configList="{\n \"name\":
\"cbr0\",\n \"cniVersion\": \"0.3.1\",\n \"plugins\": [\n {\n
\"type\": \"flannel\",\n \"delegate\": {\n
\"hairpinMode\": true,\n \"isDefaultGateway\": true\n }\n
},\n {\n \"type\": \"portmap\",\n \"capabilities\": {\n
\"portMappings\": true\n }\n }\n ]\n}\n" err="[failed to find
plugin \"flannel\" in path [/opt/cni/bin] failed to find plugin
\"portmap\" in path [/opt/cni/bin]]"

执行以下命令即可

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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 clean all
yum install kubernetes-cni -y

10.重启后k8s异常处理

重启后查看nodes节点,或者其他

[root@kubernetes ~]# kubectl get nodes

在这里插入图片描述

解决:写到环境里

bash
vim /etc/profile
加到最后面
export KUBECONFIG=/etc/kubernetes/admin.conf
重启虚拟机:init 6/reboot

再次查看::

[root@kubernetes ~]# kubectl get nodes

在这里插入图片描述

又有了新的报错:
解决:关闭交换分区,等待一会(在自启容器中)

[root@kubernetes ~]# swapoff -a
[root@kubernetes ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
kubernetes   Ready    control-plane,master   19m   v1.22.2

标签:kube,单机版,kubernetes,yum,linux,docker,k8s,root
From: https://www.cnblogs.com/JIKes/p/18025039

相关文章

  • k8s排查网络丢包
    网络丢包的定义与现象​网络丢包是指部分包正常,部分包被丢弃。从现象上看就不是网络一直不通,而是:偶尔不通。速度慢(丢包导致重传)。排查思路​TODO可能原因​高并发NAT导致conntrack插入冲突​如果高并发并且做了NAT,比如使用了ip-masq-agent,对集群外的网段或公......
  • Linux 网络编程从入门到进阶 学习指南
    前言大家好,我是小康。在上一篇文章中,我们探讨了Linux系统编程的诸多基础构件,包括文件操作、进程管理和线程同步等,接下来,我们将视野扩展到网络世界。在这个新篇章里,我们要让应用跳出单机限制,学会在网络上跨机器交流信息。接下来,我们要深入套接字(sockets)和TCP/IP协议,揭示如何......
  • Linux 系统编程从入门到进阶 学习指南
    引言大家好,我是小康,今天我们来学习一下Linux系统编程相关的知识。Linux系统编程是连接高级语言和硬件的桥梁,它对深入理解计算机系统至关重要。无论你是打算构建高性能服务器还是开发嵌入式设备,掌握Linux系统编程是C和C++开发者的基本技能。本文旨在为初学者提供一个清......
  • linux 配置密码复杂度
    首先修改/etc/pam.d/system-auth文件找到passwordrequisitepam_cracklib.so这么一行替换成如下:passwordrequisitepam_cracklib.soretry=5difok=3minlen=10ucredit=-1lcredit=-3dcredit=-3dictpath=/usr/share/cracklib/pw_dict 修过完成后,保存退出,修改mzj用户密......
  • linux(Ubuntu)安装python2.7和pip2
    由于数据处理需要的软件有些老代码,需要安装python2,原服务器上已有python3,本想着使用源码包进行编译安装,奈何make时总是报如下错误,搞半天也没解决 或者  继续往下makeinstall后程序也无法正常执行,于是索性使用apt方式进行安装,过程如下:首先查看当前版本Ubuntu可支持的pyt......
  • 在k8S中,如何查看一个Pod最近20分钟日志?
    在Kubernetes(k8S)中,要查看一个Pod最近20分钟的日志,可以使用kubectllogs命令结合--since参数来指定时间范围。但是请注意,kubectllogs目前并不直接支持以分钟为单位的时间参数,而是接受时间戳或者相对时间(例如秒数)。假设您想要查看最近20分钟的Pod日志,首先需要计......
  • 在k8S中,如何查看Pod中上一个挂掉的容器日志?
    在Kubernetes(k8S)中,如果一个Pod中的容器已经崩溃停止,并且您想查看该容器的日志,可以使用kubectllogs命令配合-p或--previous参数来获取上一个(已停止)容器的日志。命令格式如下:kubectllogs<pod-name>-p这里<pod-name>是您想要查看日志的Pod的名称。通过添加-......
  • 在k8S中,Pod被调度到一个节点的具体过程是什么?
    在Kubernetes(k8S)中,Pod被调度到一个节点的具体过程可以分为以下步骤:创建Pod用户通过kubectlapply或KubernetesAPIServer创建或更新Pod的YAML配置文件。KubernetesAPIServer接收到创建Pod的请求后,会验证该请求的正确性和有效性。准入控制在API......
  • 在k8S中,Jenkins发布详细流程是什么?
    在Kubernetes(k8S)中,使用Jenkins进行发布流程通常涉及以下步骤:环境准备:在Kubernetes集群中部署Jenkins服务,可以是通过HelmChart、Operator或直接创建Deployment等方式部署。如果需要,配置Jenkins的持久化存储以保存构建记录和数据。安装并配置与Kubernetes......
  • 在k8S中,当一个Pod有多个容器时,如何连接到指定容器?
    在Kubernetes(k8S)中,当一个Pod包含多个容器时,可以通过kubectlexec命令连接到指定的容器。kubectlexec命令允许您在运行中的Pod中执行命令或打开交互式shell。要连接到多容器Pod中的特定容器,请按照以下格式执行命令:kubectlexec-it<pod-name>-c<container-nam......