一 、Kubernetes 概述

k8s用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统,可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极其丰富的容器编排框架工具。

二、K8S特性

1.弹性伸缩

使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,
保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

2.自我修复

在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;
杀死健康检査失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。

3.服务发现和负载均衡

K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,
使得用户无需考虑容器IP问题。

4.自动发布(默认滚动发布模式)和回滚

K8S采用滚动更新策略更新应用,一次更新一个或者部分Pod,而不是同时删除所有Pod,
如果更新过程中出现问题,将回滚更改,确保升级不影响业务。

5.集中化配置管理和密钥管理

管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。
并可以将一些常用的配置存储在K8S中,方便应用程序使用。

6.存储编排,支持外挂存储并对外挂存储资源进行编排

挂载外部存储系统,无论是来自本地存储,公有云(如AWS),
还是网络存储(如NFS、Glusterfs、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。

7.任务批处理运行

提供一次性任务,定时任务;满足批量数据处理和分析的场景。

三、Kubernetes 核心概念

Kubernetes 包含多种类型的资源对象:Pod、Label、Service、Replication 、Ingress、Controller 等。

1.pod

Pod是K8s能够创建和管理的最小单位,一个Pod里可以包含一个或者多个容器应用,Pod里的容器之间共享网络、存储等资源。
请添加图片描述
一个 Pod 里可以运行多个容器,又叫边车模式(SideCar)。

而在生产环境中一般都是单个容器或者具有强关联互补的多个容器组成一个 Pod。

同一个 Pod 之间的容器可以通过 localhost 互相访问,并且可以挂载 Pod 内所有的数据卷;

但是不同的 Pod 之间的容器不能用 localhost 访问,也不能挂载其他 Pod 的数据卷。

2.Service

请添加图片描述

在K8S集群内部,为通过标签选择器相关联的一组Pod提供一个统一的访问入口(clusterIP),只支持四层代理转发。

虚拟IP只在集群内部有效。

3.Ingress

请添加图片描述
作为K8S集群外部接入层,可自定义ingress规则根据用户请求的域名或URL请求路径转发给指定的service,支持七层代理转发。

#举个例子
客户端请求 http://www.xxx.com:port  ---> Ingress ---> Service ---> Pod

四、正式安装K8S-kubeadm方式

一、安装之前准备工作

安装基本软件,关闭防火墙,关闭swap

apt install chrony ipvsadm tree ipset -y
systemctl stop ufw
swapoff -a 
sed -i '/swap.img/s/^/#/' /etc/fstab

1.hostname修改

hostnamectl set-hostname 新主机名
hostname #查看域名

2.安装容器引擎containerd

	apt update
	apt install containerd[=版本号] -y
	#/lib/systemd/system/containerd.service (二进制安装参考此配置)
	mkdir /etc/containerd/  ## 存放containerd的配置文件
	#配置containerd
	containerd config default > /etc/containerd/config.toml
	
	修改pause镜像地址:
		sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"  
		#阿里镜像地址
		sandbox_image = "harbor.hiuiu.com/kubernetes/google_containers/pause:3.9" 
		#本地harbor镜像地址
		
	修改镜像加速配置
		168       [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
		169      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
		170      endpoint = ["https://hzsbbqty.mirror.aliyuncs.com"]
	修改为true
		137             SystemdCgroup =  true

3.安装crictl工具

下载crictl安装包:

wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.1/crictl-v1.26.1-linux-amd64.tar.gz
mkdir /usr/local/bin/crictl
	tar xvf crictl-v1.29.0-linux-amd64.tar.gz -C /usr/local/bin/crictl
	vim /etc/profile
	export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/bin/crictl
	source /etc/profile
	crictl -v
	
	#配置crictl
	cat > /etc/crictl.yaml <<EOF
	runtime-endpoint: "unix:///run/containerd/containerd.sock"
	image-endpoint: "unix:///run/containerd/containerd.sock"
	timeout: 10
	debug: false
	EOF

4.安装nerdctl工具

下载nerdctl安装包

wget https://github.com/containerd/nerdctl/releases/download/v1.3.0/nerdctl-1.3.0-linux-amd64.tar.gz
tar xvf nerdctl-1.7.6-linux-amd64.tar.gz -C /usr/local/bin/
	nerdctl version
	mkdir /etc/nerdctl
	cat > /etc/nerdctl/nerdctl.toml <<EOF
	namespace = "k8s.io"
	debug = false
	debug_full = false
	insecure_registry = true
	EOF

5.安装CNI工具

CNI的作用是为容器提供网桥,如果不安装CNI,容器只有host网络模式。
安装CNI:

wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz
		tar xvf cni-plugins-linux-amd64-v1.5.1.tgz -C /opt/cni/bin/

6.测试

nerdctl run -it -p 8000:80 --rm  --name=nginx_test harbor.hiuiu.com/basic_image/centos7_filebeat_nginx:2408.u -- bash

nginx #在容器里启动nginx

7.配置时间服务器

sed -i 's/pool ntp.ubuntu.com/pool 时间服务器地址/' /etc/chrony/chrony.conf
systemctl restart chronyd

8.加载模块

modprobe br_netfilter && lsmod |grep br_netfilter
		modprobe ip_conntrack && lsmod | grep conntrack
		cat >/etc/modules-load.d/modules.conf<<EOF
		ip_vs
		ip_vs_lc
		ip_vs_lblc
		ip_vs_lblcr
		ip_vs_rr
		ip_vs_wrr
		ip_vs_sh
		ip_vs_dh
		ip_vs_fo
		ip_vs_nq
		ip_vs_sed
		ip_vs_ftp
		ip_vs_sh
		ip_tables
		ip_set
		ipt_set
		ipt_rpfilter
		ipt_REJECT
		ipip
		xt_set
		br_netfilter
		nf_conntrack
		overlay
		EOF
		systemctl restart systemd-modules-load.service
		lsmod | grep -e ip_vs -e nf_conntrack

9.修改内核参数

vim  /etc/sysctl.conf
net.ipv4.ip_forward=1
vm.max_map_count=262144
kernel.pid_max=4194303
fs.file-max=1000000
net.ipv4.tcp_max_tw_buckets=6000
net.netfilter.nf_conntrack_max=2097152
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
		
sysctl -p

10.修改machin-id

cat /etc/machine-id
rm -f /etc/machine-id
systemd-machine-id-setup

二、正式安装K8S-kubeadm方式

1.安装 kubeadm 、kubelet、 kubectl

## ----- 线上安装方式
	apt update
	apt install apt-transport-https ca-certificates curl gpg
	mkdir -p -m 755 /etc/apt/keyrings
	curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg   
	## 阿里源
	echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /" |  tee /etc/apt/sources.list.d/kubernetes.list
	## 安装命令
	apt-get update && apt-cache madison kubeadm
	apt-get install -y kubelet=1.30.3-1.1 kubeadm=1.30.3-1.1 kubectl=1.30.3-1.1
	## ----- 线上安装方式

	##线下本地安装:
	apt-get update
	apt-get upgrade
	apt-get install socat ebtables conntrack -y
	dpkg -i kubernetes-cni_1.4.0-1.1_amd64.deb
	dpkg -i cri-tools_1.30.1-1.1_amd64.deb
	dpkg -i kubeadm_1.30.3-1.1_amd64.deb 
	dpkg -i kubectl_1.30.3-1.1_amd64.deb 
	dpkg -i kubelet_1.30.3-1.1_amd64.deb 

2.拉取镜像

vim imagesFromlocal.sh

nerdctl pull harbor.hiuiu.com/kubeadm_v1.30.3/kube-apiserver:v1.30.3
nerdctl pull harbor.hiuiu.com/kubeadm_v1.30.3/kube-controller-manager:v1.30.3
nerdctl pull harbor.hiuiu.com/kubeadm_v1.30.3/kube-proxy:v1.30.3
nerdctl pull harbor.hiuiu.com/kubeadm_v1.30.3/kube-scheduler:v1.30.3
nerdctl pull harbor.hiuiu.com/kubeadm_v1.30.3/pause:3.9
nerdctl pull harbor.hiuiu.com/kubernetes/etcd:3.5.12-0
nerdctl pull harbor.hiuiu.com/kubernetes/coredns:v1.11.1

bash imagesFromlocal.sh

3.创建MASTER

kubeadm init --apiserver-advertise-address=172.16.205.10 --apiserver-bind-port=6443 --kubernetes-version=v1.30.3 --pod-network-cidr=10.200.0.0/16 --service-cidr=10.96.0.0/16 --service-dns-domain=cluster.local --image-repository=harbor.hiuiu.com/kubeadm_v1.30.3 --ignore-preflight-errors=swap

按照提示执行:
	mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
 	export KUBECONFIG=/etc/kubernetes/admin.conf

查看集群节点

kubectl get nodes

重新生成 Kubernetes 集群节点加入命令的命令

kubeadm token create --print-join-command

4.node节点加入集群

kubeadm join 172.16.205.10:6443 --token tjg2ya.qxghlqugffx33rg6 \
        --discovery-token-ca-cert-hash sha256:d763b517f993d0992d168db4a2650cb2fd2cca48900b99334241be86ecb825e4

清除 kubeadm 相关的配置和数据

kubeadm reset
sudo rm -rf /etc/kubernetes
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐