centos 7.9安装k8s

ops/2024/9/23 21:10:33/

前言

Kubernetes单词来自于希腊语,含义是领航员,生产环境级别的容器编排技术,可实现容器的自动部署扩容以及管理。Kubernetes也称为K8S,其中8代表中间8个字符,是Google在2014年的开源的一个容器编排引擎技术,用于自动化容器化应用程序的部署、规划、扩展和管理,他将组成的应用程序容器分组为逻辑单元,以便于管理和发现,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,很多细节都不需要运维人员去进行复杂的手工配置和处理。
官网:https://kubernetes.io/
代码:https://github.com/kubernets/kubernets
Kubernetes是采用Go语言开发的,Go语言是谷歌2009发布的一款开源编程语音。
 

K8S架构

Master


k8s集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求。
Master Node由API Server、Scheduler、ClusterState Store(ETCD数据库) 和Controller ManagerServer组成;


Nodes


集群工作节点,运行用户业务应用容器;
Nodes节点也叫WorkerNode,包含kubelet、kube proxy 和Pod(Container Runtime);

安装环境准备

IP描述
192.168.15.17Master
192.168.15.16Node

关闭防火墙

systemctl stop firewalld.servicesystemctl disable firewalld.service

关闭selinux

sed -i 's/enforceing/disabled/' /etc/selinux/config #永久
setenforce 0 #临时

关闭swap(k8s禁止虚拟内存以提高性能)

swapoff -a  #临时
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久

在master添加hosts

cat >> /etc/hosts << EOF
192.168.10.30  k8s-master
192.168.10.31  k8s-node1
EOF

设置网桥参数

cat >> /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOFsysctl --system

时间同步

yum -y install ntpdate

由于操作系统默认安装是英文的,所以时间同步是美国的纽约时间,所以需要修改。

mv /etc/localtime /etc/localtime.bakln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate ntp1.aliyun.com

安装Docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-20.10.12
systemctl start docker
vim /etc/docker/daemon.json
{ 
"registry-mirrors":["https://registry.docker-cn.com"] 
}
systemctl enable docker

搭建kubeadm、kubelet、kubectl

添加k8s的阿里云YUN源

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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kurbernetes/yum/doc/rpm-package-key.gpg
EOF

开始安装

yum -y install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4
systemctl enable kubelet

验证

yum list installed | grep kubelet
yum list installed | grep kubeadm
yum list installed | grep kubectl

工具介绍
kubelet:运行在cluster所有节点上,负责启动pod和容器
kubeadm:由于初始化cluster的一个工具
kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件。

创建master节点

kubeadm init --apiserver-advertise-address=192.168.15.17 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version  v1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

--apiserver-advertise-address 指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,
如果不指定,kubeadm 会自动选择有默认网关的 interface。

--pod-network-cidr 指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 --pod-network-cidr 有自己的要求,
这里设置为 10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。在后面的实践中我们会切换到其他网络方案,比如 Canal。

Master和Node都安装好之后,就可将Node 添加到master,

在此之前如果没有关闭防火墙需要开通6443端口

firewall-cmd --zone=public --add-port=6443/tcp --permanent#重启防火墙
systemctl restart firewalld

设置权限归属

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

将node节点加入到Kubernetes master中,在node上执行

kubeadm join 192.168.15.17:6443 --token nx5mr3.fdksc8hmcugownsj --discovery-token-unsafe-skip-ca-verification #后面加的跳过了CA验证

或者

kubeadm join 192.168.15.17:6443 --token nx5mr3.fdksc8hmcugownsj \--discovery-token-ca-cert-hash sha256:ab6d6e80d199d4628ddd6daa186901f21c06cb691a7e7ffcde6e0ea890077f66

如果初始化时忘记了token没有记录可以通过下面命令查看

kubeadm token list

部署网络插件

wget https://raw.githubbusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl apply -f kube-flannel.yml

查看节点

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   50m   v1.19.4
k8s-node1    Ready    <none>   29m   v1.19.4

测试部署nginx

[root@k8s-master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
[root@k8s-master ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6799fc88d8-dst82   1/1     Running   0          61s
[root@k8s-master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
[root@k8s-master ~]# kubectl get service
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        3h44m
nginx        NodePort    10.105.171.223   <none>        80:32161/TCP   22s

安装时遇到的问题:

问题一:

[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/

这个警告信息表明Docker可能未按预期使用systemd的cgroup管理系统。cgroupfs是一种管理系统资源的方式,而systemd提供了一个系统和服务管理器,它也使用cgroup来管理资源。

解决:

确认你的系统是否支持并使用systemd作为初始化系统。如果是,请确保Docker配置为使用systemd的cgroup驱动。编辑Docker服务文件。通常这个文件位于/etc/docker/daemon.json。如果文件不存在,你需要创建它。在daemon.json中,设置"exec-opts"选项来指定使用systemd的cgroup驱动。例如:

{"exec-opts": ["native.cgroupdriver=systemd"]
}

重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

检查Docker是否正在使用systemd的cgroup驱动。

docker info | grep Cgroup

问题二:

k8s The connection to the server localhost:8080 was refused - did you specif

出现这个问题的原因是kubectl命令需要使用kubernetes-admin的身份来运行,在“kubeadm int”启动集群的步骤中就生成了“/etc/kubernetes/admin.conf”。

因此,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:

scp /etc/kubernetes/admin.conf 192.168.15.16:/etc/kubernetes/admin.conf

然后分别在工作节点上配置环境变量:

#设置kubeconfig文件
export KUBECONFIG=/etc/kubernetes/admin.conf

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profilesource /etc/profile

K8S tab命令补全

yum install -y bash-completion
echo 'source /usr/share/bash-completion/bash_completion' >> ~/.bashrc
echo 'source  <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
kubectl describe nodes


http://www.ppmy.cn/ops/114962.html

相关文章

PWN二进制安全修仙秘籍【第一章#工具篇02】GDB的使用及pwndbg插件安装

很多人在学习新知识之前都不喜欢研究理论、原理&#xff0c;我觉得这是大错特错的&#xff01;&#xff01;&#xff01; 所以 在学习GDB的使用之前&#xff0c;我们先来学习一下GDB的组成 1. GDB的组成 下面这张图就是GDB的组成架构&#xff0c;是不是很抽象哩&#xff0c…

chatGPT问答知识合集【一】

influnxdb与jmeter集成 InfluxDB 是一个开源的时间序列数据库,而 JMeter 是一个用于性能测试的工具。将 InfluxDB 与 JMeter 集成可以帮助您将 JMeter 测试结果数据存储在 InfluxDB 中,以便后续进行数据分析、可视化和监控。这种集成可以帮助您更好地了解应用程序的性能和行…

单片机与PIC的区别:多方面对比

单片机与PIC的区别&#xff1a;多方面对比 在现代电子产品的设计中&#xff0c;单片机和PIC都是不可或缺的控制器。尽管它们在功能上有许多相似之处&#xff0c;但在设计、应用、优势和劣势等方面却有显著区别。今天&#xff0c;我们就来详细对比一下单片机和PIC。 1. 定义与…

计算机网络各层有哪些协议?

计算机网络的各层协议知识总结 一、物理层 没有涉及到比较重要的协议&#xff0c;但是有一个比较重要的技术----非对称数字用户线&#xff08;ADSL&#xff09; 二、数据链路层 1、点对点协议&#xff08;PPP----point to point protocol&#xff0c;用户计算机与ISP进行通信…

docker部署datart并配置邮件发送及遇到的问题

上篇文章讲了如何 使用docker部署datart后&#xff0c;由于需要使用邮件功能&#xff0c;所以查看官方的邮件相关配置 由于我只有一个data.conf文件&#xff0c;于是我给邮件的配置直接放在data.conf里&#xff0c;先给官方提供的节点转为行节点就是下面这个配置&#xff1a; s…

python学习总结--引用redis,ImportError: No module named redis

使用的Ubutun&#xff0c;使用python语言操作redis&#xff0c;结果显示找不到redis模块. 解决&#xff1a; 本机有两个版本python2和python3&#xff0c;使用pip默认安装到python3版本&#xff0c;或者自己查看一下pip install安装在什么位置。结果自己使用python connect_red…

前端vue-子组件对于父组件的传值的约束

组件中可以传字符串&#xff0c;布尔值&#xff0c;数组&#xff0c;对象&#xff0c;函数 如果子组件对于父组件传来的值进行校验&#xff0c;那么我们把子组件中的props中的数据写成{}的形式 &#xff0c;在里面进行数据的约束 required&#xff1a;是必须要传值&#xff0c;…

Python 类class的用法详解

Python 是一门支持面向对象编程的语言&#xff0c;类&#xff08;class&#xff09;是面向对象编程的基本概念之一。通过类&#xff0c;我们可以封装数据和方法&#xff0c;实现代码的模块化、可重用和可维护。本文将详细介绍 Python 中类的用法&#xff0c;包括类的定义、继承…