kubenets部署记录

部署等记录

Kubelet:负责在每个节点上管理容器,并与控制平面通信。

Kube Proxy:负责为 Pod 提供网络代理和负载均衡。

API Server:提供 Kubernetes 控制平面的 API,用于管理集群中的资源。

Controller Manager:用于处理控制器的核心组件,确保系统中的期望状态。

Scheduler:负责将新的 Pod 分配到集群中的节点上。

etcd:一种高度一致性的键值存储,用于保存集群的配置数据。

#kubectl命令自动补全
source <(kubectl completion bash)


#修改网络
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#BOOTPROTO=static  # 如果您想使用静态 IP 地址,请使用 static;如果要使用 DHCP,请使用 dhcp
#DEFROUTE=yes
#IPV4_FAILURE_FATAL=no
#IPV6INIT=yes
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_FAILURE_FATAL=no
#NAME=ens33
#UUID=your-uuid-here  # 通常可以保持不变
#DEVICE=ens33
#ONBOOT=yes  # 设置为 yes 以在系统启动时激活接口
#IPADDR=your-ip-address-here  # 静态 IP 地址
#NETMASK=your-subnet-mask-here
#GATEWAY=your-gateway-here  # 网关地址
#DNS1=your-dns-server-here  # 首选 DNS 服务器
#DNS2=your-dns-server-here  # 可选的备用 DNS 服务器
systemctl restart network

#设置主机名
hostnamectl set-hostname k8s-node1

#防火墙
firewall-cmd --state
systemctl stop firewalld
#禁止开机启动
systemctl disable firewalld
sudo swapoff -a

#时间同步
yum install ntpdate -y

#selinux设置
getenforce
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
#关闭交换分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a

#查看br_netfilter模块(它提供了网络桥接中的一些网络过滤功能,允许你在桥接设备上应用防火墙规则和网络策略)
lsmod | grep br_netfilter

#确保容器可以相互通信,并且网络策略能够正常工作
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
vm.swappiness = 0
EOF

# 加载br_netfilter模块
modprobe br_netfilter
# 查看是否加载
lsmod | grep br_netfilter
# 生效
sysctl --system

#网络安全功能(检查数据包的源地址,以确保数据包的源地址和出口接口匹配)
#禁用 rp_filter。这将关闭反向路径过滤功能。
#启用 rp_filter。这是默认设置,它检查数据包的源地址是否与出口接口匹配。如果不匹配,数据包将被丢弃。
#强制 rp_filter。与值 1 类似,但它更严格,要求源地址必须匹配到达的出口接口上的子网。
rp_filter

#基于 IPVS 的 Service 代理 IPVS 是一种网络层负载均衡技术,可以在传输层(TCP/UDP)上运行,并提供多种负载均衡算法和调度方法
yum -y install ipset ipvsadm

#加载内核模块
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
lsmod | grep -e ipvs -e nf_conntrack_ipv4

#安装Docker -o 改名
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-18.06.3.ce-3.el7
systemctl enable docker && systemctl start docker
docker version

sudo mkdir -p /etc/docker
#Cgroup 驱动、镜像加速、日志设置和存储驱动
jsonsudo tee /etc/docker/daemon. <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://du3ia00u.mirror.aliyuncs.com"],
  "live-restore": true,
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"},
  "storage-driver": "overlay2"
}
EOF
#重新加载 systemd 的服务单元配置
sudo systemctl daemon-reload
sudo systemctl restart docker

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
vim /etc/sysconfig/kubelet
# kubelet 修改 group 驱动来管理容器中的资源(如 CPU、内存等)并确保资源隔离 控制生命周期
# server.go:274] failed to run Kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
systemctl enable kubelet

#简化 Kubernetes 的部署和集群初始化

kubeadm init \
  --apiserver-advertise-address=192.168.154.3 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.18.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16
  #指定 API Server 使用的广播地址。这是控制平面组件之一,它将监听此地址上的请求
  # 指定 API Server 使用的广播地址。这是控制平面组件之一,它将监听此地址上的请求

To start using your cluster, you need to run the following as a regular user:

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

#存放kubectl 配置文件  集群配置
mkdir -p $HOME/.kube
#将 Kubernetes 控制平面的配置文件(通常命名为 admin.conf)复制到您的用户主目录下的 .kube 目录,并将其命名为 config。这是 kubectl 默认的配置文件名称
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#更改配置文件所有者
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#根据提示添加
kubeadm join 192.168.154.3:6443 --token hc6kr6.qak2cnm0pjj2sjfm \
    --discovery-token-ca-cert-hash sha256:76aa8f93a66489352d45d9e1851a44fff7719d4e339508522005f47254b1ef01
#工作节点已成功加入 Kubernetes 集群
    This node has joined the cluster:
    * Certificate signing request was sent to apiserver and a response was received.
 #Kubelet 已经获知了与控制平面建立安全连接所需的详细信息。这包括用于加密通信的证书和密钥
    * The Kubelet was informed of the new secure connection details.

    Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
#检查master
kubectl get nodes

#token
kubeadm token create --print-join-command
# 生成一个永不过期的token
kubeadm token create --ttl 0 --print-join-command

#部署CNI网络插件 配置容器的网络设置,包括分配IP地址、设置路由规则、创建虚拟网络设备等
#下载配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#kubectl apply -f 命令后面可以跟远程 URL 的 Kubernetes 配置文件,以便从远程直接应用配置。这是一个很方便的方法,特别是当您希望使用互联网上的预定义配置文件时。
# 所以您的命令是完全有效的,它会从指定的 URL 下载 kube-flannel.yml 文件并将其应用到您的 Kubernetes 集群中
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#查看节点健康状态
kubectl get cs
# Kubernetes 集群的信息,包括控制平面的地址、API 服务器的地址以及 DNS 服务的地址等
kubectl cluster-info

kubectl create deployment nginx --image=nginx:1.14-alpine
kubectl expose deployment nginx --port=80 --type=NodePort

#查看Pods 和 Services 的信息
kubectl get pods,svc

资源管理
所有的内容都抽象为资源,用户需要通过操作资源来管理Kubernetes
`kubectl` 是 Kubernetes 命令行工具,用于与 Kubernetes 集群进行交互和管理。以下是一些常见的 `kubectl` 命令以及它们的基本用途:
        操作       资源类型 资源名称  指定参数
kubectl [command] [TYPE] [NAME] [flags]


Namespace是kubernetes系统中一种非常重要的资源,它的主要作用是用来实现多套系统的资源隔离或者多租户的资源隔离
Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
#添加标签, 删除标签,查询标签,yaml配置方式
可以通过Label实现资源的多纬度分组,以便灵活、方便地进行资源分配、调度、配置和部署等管理工作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值