单位做网站有哪些,网站建设火凤凰,设计公司排名,吉林市城市建设档案馆官方网站文章目录 一. 核心组件架构二. 有状态与无状态应用三. 资源对象3.1 规约与状态3.2 资源的分类-元数据,集群,命名空间3.2.1 元数据3.2.2 集群资源 3.3 命名空间级3.3.1 pod3.3.2 pod-副本集3.3.3 pod-控制器 四. Kubeadm安装k8s集群4.1 初始操作4.2 ~~所有节点安装Docker#x… 文章目录 一. 核心组件架构二. 有状态与无状态应用三. 资源对象3.1 规约与状态3.2 资源的分类-元数据,集群,命名空间3.2.1 元数据3.2.2 集群资源 3.3 命名空间级3.3.1 pod3.3.2 pod-副本集3.3.3 pod-控制器 四. Kubeadm安装k8s集群4.1 初始操作4.2 ~~所有节点安装Docker不建议~~4.2 contained运行时容器安装4.3 所有节点安装kubernates组件4.4 安装高可用组件4.5 集群初始化4.5.2 安装helm4.5.3 离线安装Calico4.5.4 Metrics Server4.5.5 Kuboard4.5.6 集群验证 K8s图
# containerd常用命令
ctr -nnamespace c ls # ctr -nnamespace containers list 查看containerd容器
ctr -nnamespace i ls # ctr -nnamespace images list 查看containerd镜像
ctr ns ls # ctr namespace list 查看containerd命名空间# 应当交由k8s pod管理。我们很少直接操作容器
ctr -nnamespace c rm 容器ID # 删除容器
ctr -nnamespace i rm 镜像ID # 删除镜像# kubectl常用命令
kubectl get ns # 查看k8s命名空间
kubectl get nodes # 查看k8s集群节点
kubectl get pods -n namespace # 查看某命名空间下所有pod
kubectl get pods -n namespace -o wide # 查看pod的详细内容kubectl logs pod -n namespace # 查看某容器日志记录
kubectl describe pod -n namespace # Kubernetes 资源如 pod、节点和部署的详细信息kubectl delete pod pod -n namespace # 删除容器
kubectl delete namespaces namespace # 删除命名空间kubectl taint nodes k8s-node2 check:NoExecute- # 去除污点
kubectl taint nodes k8s-node2 checkyuanzhang:NoExecute # 设置污点
一. 核心组件架构 Kube-APIServer:集群的控制中枢各个模块之间信息交耳都需要经过 Kube-APIServer同 时它也是集群管理、资源配置、整个集群安全机制的入口。
Controller-Manager:集群的状态管理器保证Pod 或其他资源达到期望值也是需要和APISewr进行通信在需要的时候创建、更新或删除它所管理的资源。
Scheduler:集群的调度中心它会根据指定的一系列条件选择一个或一批最佳的节点然后部署我们的 Pod。
Etcd: 键值数据库,报错一些集群的信息,一般生产环境中建议部署三个以上节点(奇数个)
Kubelet: 负责监听节点上 Pod的状态,同时负责上报节点和节点上面Pod 的状态,负责与 Master节点通信并管理节点上面的Pod。
Kube-proxy:负责Pod之间的通信和负载均衡将指定的流量分发到后端正确的机器上。查看 Kube-proxy 工作模式:curl 127.0.0.1:10249/proxyMode
ipvs:监听 Master 节点增加和删除 service 以及 endpoint 的消息调用 Netlink接口创建相应的IPVS 规则。通过IPVS 规则将流量转发至相应的Pod上。
Iptables:监听 Master 节点增加和删除 service 以及endpoint 的消息对于每一个Service他都会场景一个iptables 规则将service 的 clusterIP 代理到后端对应的 Pod。
Calico:符合CNI标准的网络插件给每个Pod 生成一个唯一的IP地址并且把每个节点当做一个路由器。Ciliume
CoreDNS:用于 Kubernetes 集群内部 Service 的解析可以让 Pod 把 Service 名称解析成 IP 地址然后通过 Service的IP地址进行连接到对应的应用上。
Containerd 容器引擎负责对容器的管理。
Pod: Pod 是 Kubernetes 中最小的单元它由一组、一个或多个容器组成每个 Pod 还包含了一个 Pause 容器,Pause 容器是 Pod 的父容器,主要负责僵尸进程的回收管理,通过通过 Pause容器可以使同一个 Pod 里面的多个容器共享存储、网络、PID、IPC等。为不同的容器厂商提供了标准的CRI接口实现容器调用。 二. 有状态与无状态应用
简单理解: 有数据存储的中间件是有状态应用,反之则是无状态.
无状态有状态缺点不能存储数据需要额外的数据服务支撑集群环境下需要实现主从、数据同步、备份、水平扩容复杂优点对客户端透明无依赖关系可以高效实现扩容、迁移可以独立存储数据实现数据管理 三. 资源对象
Kubernetes中的所有内容都被抽象为资源如Pod、service.Node等都是资源。“对象就是资源的实例是持久化的实体。如某个具体的Pod、某个具体的Node。Kubernetes使用这些实体去表示整个集群的状态。
各组件配置API官方文档
3.1 规约与状态 spec”是“规约、“规格”的意思spec是必需的它描述了对象的期望状态(Desired state) ——希望对象所具有的特征。当创建Kubernetes对象时必须提供对象的规约用来描述该对象的期望状态以及关于对象的一些基本信息(例如名称)。
status 表示对象的实际状态该属性由k8s自己维护k8s会通过一系列的控制器对对应对象进行管理让对象尽可能的让实际状态与期望状态重合。
3.2 资源的分类-元数据,集群,命名空间
大致分为三类: 元数据,集群,命名空间 3.2.1 元数据
一句话概括:对Kubernetes的所有资源实施了弹性约束和全局约束并对实例的创建规则进行了描述。
Horizontal Pod Autoscaler (HPA): PodTemplate LimitRange
3.2.2 集群资源
Namespace Node ClusterRole ClusterRoleBinding
不能绑定到元数据上的资源
3.3 命名空间级
3.3.1 pod
为什么我们需要Pod当我们仅有运行时环境时我们希望多个高度耦合的Java项目能够共享同一个数据卷以实现数据共享。然而在一对多的管理情况下这变得极其不方便。
建议: 在一个Pod中关联了紧耦合的容器。通常情况下一个Pod只包含一个容器。 3.3.2 pod-副本集
扩缩容的基础实例
3.3.3 pod-控制器
管理pod的控制器有很多,负责pod的无状态,有状态,定时任务,守护进程等的管理
无状态服务-扩缩容控制器 ReplicaSet(RS) 无状态服务-Deployment 针对RS的扩展,具备额外的滚动升级,回滚暂停恢复等 有状态服务-StatefulSet 专门针对于有状态服务进行部署的一个控制器
一句话总结: 保证无缝切换数据不丢失同时确保项目能够访问新的容器地址并保持集群主从关系的稳定就像Redis哈希槽分区一样确保分区不会混乱。
稳定的持久化存储: 即 Pod 重新调度后还是能访问到相同的持久化数据基于 PVC 来实现稳定的网络标志: 稳定的网络标志即 Pod 重新调度后其 PodName 和 HostName 不变基于 Headless Service即没有 Cluster IP 的 Service来实现有序部署有序扩展: 有序部署有序扩展即 Pod 是有顺序的在部署或者扩展的时候要依据定义的顺序依次依次进行即从 0到 N-1在下一个Pod 运行之前所有之前的 Pod 必须都是 Running 和 Ready 状态基于 init containers 来实现有序收缩有序删除: 有序收缩有序删除即从 N-1 到 0
Headless Service用于定义网络标志DNS domainDNS域名服务将域名与 ip 绑定映射关系服务名 访问路径域名 ipvolumeClaimTemplate用于创建持久化模板,类似docker数据卷DaemonSetDaemonSet 保证在每个 Node 上都运行一个容器副本常用来部署一些集群的日志、监控或者其他系统管理应用。job一次定时任务cronjob周期定时任务
服务发现
servicePod 不能直接提供给外网访问而是应该使用 service。Service 就是把 Pod 暴露出来提供服务IngressIngress 可以提供外网访问 Service 的能力。可以把某个请求地址映射、路由到特定的 service。ingress 需要配合 ingress controller 一起使用才能发挥作用ingress 只是相当于路由规则的集合而已真正实现路由功能的是 Ingress Controlleringress controller 和其它 k8s 组件一样也是在 Pod 中运行。 配置与存储
Volume :数据卷共享 Pod 中容器使用的数据。用来放持久化的数据比如数据库数据。CSI: Container Storage Interface 是由来自 Kubernetes、Mesos、Docker 等社区成员联合制定的一个行业标准接口规范旨在将任意存储系统暴露给容器化应用程序。CSI 规范定义了存储提供商实现 CSI 兼容的 Volume Plugin 的最小操作集和部署建议。CSI 规范的主要焦点是声明 Volume Plugin 必须实现的接口。ConfigMap: 用来放配置与 Secret 是类似的只是 ConfigMap 放的是明文的数据Secret 是密文存放。Secret : Secret 解决了密码、token、密钥等敏感数据的配置问题而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用。 Secret 有三种类型 Service Account用来访问 Kubernetes API由 Kubernetes 自动创建并且会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中 Opaquebase64 编码格式的 Secret用来存储密码、密钥等 kubernetes.io/dockerconfigjson用来存储私有 docker registry 的认证信息。DownwardAPI: downwardAPI 这个模式和其他模式不一样的地方在于它不是为了存放容器的数据也不是用来进行容器和宿主机的数据交换的而是让 pod 里的容器能够直接获取到这个 pod 对象本身的一些信息。 downwardAPI 提供了两种方式用于将 pod 的信息注入到容器内部 环境变量用于单个变量可以将 pod 信息和容器信息直接注入容器内部 volume 挂载将 pod 信息生成为文件直接挂载到容器内部中去
role/rolebinding
四. Kubeadm安装k8s集群
kubectl debug #设置临时容器
sidecar # 本地文件日志filebeat收集和业务容器顺序定义
volumn # 更改目录权限1.18之后不建议修改权限文件数量大可能起不来容器
configMap和Secret #1.18后不支持运行时修改避免热更新出错导致生产事故至少有 master,node节点服务器 操作系统: Centos7 K8S: 1.24 运行时环境不支持docker 运行时环境: ContaniedCRI-O
4.1 初始操作 https://github.com/kubernetes/kubernetes/issues/53533
主机名ipk8s-master01192.168.0.101k8s-master02192.168.0.102k8s-master03192.168.0.103k8s-node01192.168.0.104k8s-node02192.168.0.105k8s-node03192.168.0.106k8s-loadblancer192.168.0.107
所有节点配置dns映射文件
vi /etc/hosts
192.168.0.101 k8s-master01
192.168.0.102 k8s-master02
192.168.0.103 k8s-master03
192.168.0.104 k8s-node01
192.168.0.105 k8s-node02
192.168.0.106 k8s-node03
192.168.0.107 k8s-loadblancersystemctl disable --now firewalld
systemctl disable --now dnsmasg
#systemctl disable --now NewworkManager #Centos8无需关闭
setenforce 0
#start
vim /etc/sysconfig/selinux
# 修改selinux参数
SELINUXdisabled
#end # swap启用后在使用磁盘空间和内存交换数据时性能表现会较差会减慢程序执行的速度# kubelet 在 1.8 版本以后强制要求 swap 必须关闭
swapoff -a sysctl -w vm.swappiness0vim /etc/sysctl.conf
#start
net.ipv4.ip_local_port_range 1024 65535
#end
sysctl -p# 注释swap静态文件读取有些云服务器没有
vi /etc/fstab
# /swap.img none swap sw 0 0 # 安装同步时间
yum install ntpdate -y
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo Asia/Shanghai /etc/timezone
ntpdate ntp1.aliyun.com#加入到crontab
crontab -e
#
*/5 * * * * ntpdate ntp1.aliyun.com
# # 配置网络
# 配置iptables参数使得流经网桥的流量也经过iptables/netfilter防火墙
# 设置必需的 sysctl 参数这些参数在重新启动后仍然存在。
cat /etc/sysctl.d/k8s.conf EOF
#####################################
#关闭ipv6协议
net.ipv4.ip_nonlocal_bind 1
net.ipv4.ip_forward 1
net.ipv6.conf.all.disable_ipv61
#开启网桥模式可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-iptables 1
net.bridge.bridge-nf-call-ip6tables 1
fs.may_detach_mounts 1
vm.overcommit_memory1
vm.panic_on_oom0
fs.inotify.max_user_watches89100
fs.file-max52706963
fs.nr_open52706963
net.netfilter.nf_conntrack_max2310720
net.ipv4.tcp_keepalive_time 600
net.ipv4.tcp_keepalive_probes 3
net.ipv4.tcp_keepalive_intvl 15
net.ipv4.tcp_max_tw_buckets 36000
net.ipv4.tcp_tw_reuse 1
net.ipv4.tcp_max_orphans 327680
net.ipv4.tcp_orphan_retries 3
net.ipv4.tcp_syncookies 1
net.ipv4.tcp_max_syn_backlog 16384
net.ipv4.ip_conntrack_max 65536
net.ipv4.tcp_max_syn_backlog 16384
net.ipv4.tcp_timestamps 0
net.core.somaxconn 16384
#######################################
EOFsysctl --system # 生效Master01节点免密钥登录其他节点,安装过程中生成配置文件和证书均在 Master01上操作 集群管理也在 Master01 上操作阿里云或者 AWS 上需要单独一台kubectl服务器。密钥配置如下: 只在主节点进行
ssh-keygen -t rsafor i in k8s-master01 k8s-master02 k8s-master03 k8s-node01 k8s-node02 k8s-node03;do ssh-copy-id -i .ssh/id_rsa.pub $i;done所有节点安装负载均衡配置
yum install ipvsadm ipset sysstat conntrack libseccompmodprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack # nf_connectrack_ipv4# 设置开机自启动
vi /etc/modules-load.d/ipvs.conf
#
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack #nf_conntrack_ipv4
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
# systemctl enable --now systemd-modules-load.service
# 检查是否加载
lsmod | grep -e ip_vs -e nf_conntrackinstall ipset ipvsadm -y
reboot4.2 所有节点安装Docker不建议
需要说明的是k8s 1.24以停止维护docker需要额外安装docker-ce符合k8s容器接口标准。或者仅安装containerd容器 docker底层containerd。 之前k8s依赖顶层dockerdocker操作containerd。但是docker不符合cri标准被k8s踢出局了。直接对接底层contained。然后可以用containerd或者cri-o等cri-o和docker一个级别但是符合cri标准。
所有节点安装 查阅K8S适配容器
本博主采用欧拉系统华为云HCE以及欧拉操作系统开放源自基金会对于yum/dnf源官方源都有问题。。最后看了一篇csdn成功了换源如下
# 使用华为云服务Yum安装软件的时候提示错误
# Error: Failed to download metadata for repo ‘epel’: Cannot download repomd.xml
https://blog.csdn.net/qq_58551342/article/details/137334183
https://cloud.tencent.com/developer/article/2383890centos78系统
# 配置docker源
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
yum clean all
# 重新构建缓存索引
yum makecache# 查看可用docker版本
yum list docker-ce.x86_64 --showduplicates | sort -r# 安装最新版本的 Docker Engine 和 containerd或者进入下一步安装特定版本
yum install docker-ce docker-ce-cli containerd.io -ysystemctl enable --now docker4.2 contained运行时容器安装
# 配置软件源
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
# 修改安装源为国内地址
sed -i s#https://download.docker.com#https://mirrors.tuna.tsinghua.edu.cn/docker-ce# /etc/yum.repos.d/docker-ce.repo
# openEuler 的使用方式近似 CentOS因此修改软件源的配置使用 centos 7 的软件源
sed -i s#$releasever#7#g /etc/yum.repos.d/docker-ce.repoyum clean all
yum makecachecat EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOFmodprobe overlay
modprobe br_netfilter# 应用 sysctl 参数而无需重新启动
sudo sysctl --system# 移除之前安装的
remove docker docker-engine docker.io containerd runcyum install containerd -y修改配置符合k8s标准
# 生成默认配置
mkdir -p /etc/containerd
# 生成默认配置文件并写入到 config.toml 中
containerd config default | sudo tee /etc/containerd/config.toml# 配置containerd
vim /etc/containerd/config.toml
#start
[plugins.io.containerd.grpc.v1.cri.registry]config_path /etc/containerd/certs.d[plugins.io.containerd.grpc.v1.cri.containerd.runtimes.runc]...[plugins.io.containerd.grpc.v1.cri.containerd.runtimes.runc.options]SystemdCgroup true # false 修改为 true[plugins.io.containerd.grpc.v1.cri]...# sandbox_image k8s.gcr.io/pause:3.6 crictl images list | grep pausesandbox_image registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 #这里一定要注意要根据下载到本地 pause镜像的版本来进行修改否则初始化会过不去。
#end# 创建指定配置目录
mkdir /etc/containerd/certs.d/docker.io -pv
cat /etc/containerd/certs.d/docker.io/hosts.toml EOF
server https://docker.io
[host.https://xxxxxxxx.mirror.aliyuncs.com]capabilities [pull, resolve]
EOFsystemctl daemon-reload
systemctl enable --now containerd4.3 所有节点安装kubernates组件
所有节点安装 欧拉操作系统参考如下
# 欧拉操作系统
https://docs.openeuler.org/zh/docs/20.03_LTS_SP1/docs/thirdparty_migration/k8sinstall.html#添加 kubernetes 仓库 欧拉不执行
cat EOF /etc/yum.repos.d/kubernetes.repo
[kubernetes]
nameKubernetes
baseurlhttp://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled1
gpgcheck1
repo_gpgcheck0
gpgkeyhttp://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum clean all
yum makecache
yum list kubeadm.x86_64 --showduplicates | sort -r
#yum install -y kubelet-1.18.20 kubeadm-1.18.20 kubectl-1.18.20 kubernetes-cni-1.18.20
# 安装kubeadm会把 kubeletkubectl cni都装上
yum install -y kubeadm-1.28.2-0
# 设置Kubelet开机自启动
systemctl daemon-reload
systemctl enable --now kubelet4.4 安装高可用组件 负载均衡节点或者所有master节点安装
使用Keepalived和HAproxy创建高可用集群
yum install keepalived haproxy -y
vim /etc/haproxy/haproxy.cfg
#start
# 由于 lb1 和 lb2 上安装了 Keepalived 和 HAproxy
# 如果其中一个节点故障虚拟 IP 地址即浮动 IP 地址将自动与另一个节点关联
# 使集群仍然可以正常运行从而实现高可用。
globallog /dev/log local0 warningchroot /var/lib/haproxypidfile /var/run/haproxy.pidmaxconn 4000user haproxygroup haproxydaemonstats socket /var/lib/haproxy/statsdefaultslog globaloption httplogoption dontlognulltimeout connect 5000timeout client 50000timeout server 50000frontend kube-apiserverbind *:6444mode tcpoption tcplogdefault_backend kube-apiserverbackend kube-apiservermode tcpoption tcplogoption tcp-checkbalance roundrobindefault-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100# 请注意 server 字段。请记住 6443 是 apiserver 端口 代理到的master节点server kube-apiserver-1 192.168.0.101:6443 check # Replace the IP address with your own.server kube-apiserver-2 192.168.0.102:6443 check # Replace the IP address with your own.server kube-apiserver-3 192.168.0.103:6443 check # Replace the IP address with your own.
#end
systemctl restart haproxy
systemctl enable --now haproxyvim /etc/keepalived/keepalived.conf
#start
global_defs {notification_email {}router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}
## 检测haproxy程序脚本
vrrp_script chk_haproxy {script killall -0 haproxyinterval 2weight 2
}vrrp_instance haproxy-vip {state BACKUPpriority 100# 对于 interface 字段您必须提供自己的网卡信息。您可以在机器上运行 ifconfig 以获取该值。interface eth0 # Network cardvirtual_router_id 60advert_int 1authentication {auth_type PASSauth_pass 1111}
# 为 unicast_src_ip 提供的 IP 地址是您当前机器的 IP 地址公网ipunicast_src_ip 192.168.0.101 # The IP address of this machine
# 对于也安装了 HAproxy 和 Keepalived 进行负载均衡的其他机器必须在字段 unicast_peer 中输入其 IP 地址。unicast_peer { # 公网ip# 192.168.0.102 # The IP address of peer machines}virtual_ipaddress { # 公网ip# 192.168.0.10/24 # The VIP address}track_script {chk_haproxy}
}
#end
# 启动
systemctl restart keepalived
systemctl enable --now keepalived4.5 集群初始化
利用 kubeadm 创建高可用集群 只在一个master节点初始化
# 节点初始化 均为私网地址后期通过
# --control-plane-endpoint 负载均衡节点其他node节点以此为准一般为公网ip
# --kubernetes-version 初始化的k8s版本要和kubeadm一致
# --image-repository 镜像源
# --pod-network-cidr配置pod网络段calico需要和其一致 子网划分套用
# --service-cidr 直接套用
# -- apiserver-advertise 当前master节点内网ip
kubeadm init --control-plane-endpoint 192.168.0.101:6444 \
--upload-certs \
--kubernetes-versionv1.28.2 \
--image-repositoryregistry.aliyuncs.com/google_containers \
--pod-network-cidr10.244.0.0/16 \
--service-cidr10.96.0.0/12 \
--apiserver-advertise-address192.168.0.101 \
--apiserver-bind-port6443 \
-–cri-socket unix:///run/containerd/containerd.sock
# 初始化失败执行以下内容
kubeadm reset# 查看组件状态
kubectl get pods -n kube-system# iptables修改为ipvs
kubectl edit configmaps kube-proxy -n kube-system
# 删除之前的kube-proxy
kubectl get pod -n kube-system |grep kube-proxy |awk {system(kubectl delete pod $1 -n kube-system)}# 验证代理模式
kubectl get pod -n kube-system | grep kube-proxy
kubectl logs kube-proxy-bk7pl -n kube-system
netstat -lntp | grep kube-proxy
curl 127.0.0.1:port/proxyMode# 查看token过期时间
kubeadm token list
# 假如token过期
# 生成node节点token
kubeadm token create --print-join-command
# 生成master的
kubeadm init phase upload-certs --upload-certs
#master节点
kubeadm join 197.168.0.101:80 --token 6btwxm.ln24af24fj4zna76 \--discovery-token-ca-cert-hash sha256:898981bce15f5f4f8654c7a8f8ade7f2c5ea626193f90add6b208df6972362a0 \--control-plane --certificate-key 104fc0e4d56387568a5962c1a8cbb1f42c1395b0704c10fcfd8b753369bfd5fb#node节点
kubeadm join 197.168.0.101:80 --token 6btwxm.ln24af24fj4zna76 \--discovery-token-ca-cert-hash sha256:898981bce15f5f4f8654c7a8f8ade7f2c5ea626193f90add6b208df6972362a0 4.5.2 安装helm
Helm 图表是一种为 Kubernetes类似于操作系统或操作系统打包应用程序的方法。ArgoCD 等工具也使用 Helm 来管理集群中的应用程序负责安装、升级如果需要时回滚等。
helm下载
wget https://get.helm.sh/helm-v3.15.1-linux-amd64.tar.gz
tar -zxvf helm-v3.15.1-linux-amd64.tar.gz \mv linux-amd64/helm /usr/local/bin/ \rm -rf linux-amd644.5.3 离线安装Calico
官方地址版本对应 安装资源包
本节参考自 离线安装calico 解压calico离线包并将所需文件上传至服务器 首先将calico.yaml文件上传至服务器 然后使用cat calico.yaml |grep image:命令查看calico所需的镜像包。
cat calico.yaml |grep image:这里显示安装calico需要三个镜像去解压的离线包imgaes文件夹中找到对应的三个离线镜像包文件这里对应的分别是calico-cni.tarcalico-kube-controllers.tar和calico-node.tar三个离线包将这三个离线镜像上传至服务器。 可以使用ctr namespace ls命令查看containerd的命名空间。k8s的命名空间为k8s.io
离线镜像导入containerd的k8s命名空间中使用containerd的导入镜像命令将calico的离线镜像包导入到k8s的命名空间中
ctr -n k8s.io images import calico-cni.tar
ctr -n k8s.io images import calico-kube-controllers.tar
ctr -n k8s.io images import calico-node.tar用之前上传的calico.yaml文件安装calicocalico.yaml可根据自己的实际需要修改。
vi calico.yaml
#start
#修改calico.yaml里的pod网段。 和kubadm init时候 pod-network-cidr参数保持一致
#把calico.yaml里pod所在网段改成kubeadm init时选项--pod-network-cidr所指定的网段
#直接用vim编辑打开此文件查找192按如下标记进行修改
- name: IPvalue: autodetect
- name: IP_AUTODETECTION_METHOD #添加该环境变量value: interfaceeth.*|ens.*
# no effect. This should fall within --cluster-cidr.
- name: CALICO_IPV4POOL_CIDRvalue: 10.244.0.0/16
# Disable file logging so kubectl logs works.
- name: CALICO_DISABLE_FILE_LOGGINGvalue: true
#end
# 为主节点和工作节点添加特定公网 IP 的注释
kubectl annotate node k8s-node01 projectcalico.org/IPv4Address203.0.113.1
kubectl apply -f calico.yaml
kubectl get pods -n kube-system4.5.4 Metrics Server
对于 KubernetesMetrics API 提供了一组基本的指标以支持自动伸缩和类似的用例。 该 API 提供有关节点和 Pod 的资源使用情况的信息 包括 CPU 和内存的指标。 metrics-server 会请求每台节点的 kubelet 接口来获取监控数据接口通过 HTTPS 暴露但 Kubernetes节点的 kubelet 使用的是自签证书若 metrics-server 直接请求 kubelet接口将产生证书校验失败的错误因此需要在 components.yaml 文件中加上 --kubelet-insecure-tls启动参数。 且由于 metrics-server 官方镜像仓库存储在 k8s.gcr.io 国内可能无法直接拉取您可以自行同步到 CCR或使用已同步的镜像 ccr.ccs.tencentyun.com/mirrors/metrics-server:v0.7.1 metrics server
# 下载 yaml 部署文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.1/components.yaml
# containerd容器下载
ctr image pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.7.1vi components.yaml
#start
# 修改 metrics-server 启动参数
containers:
- args:- --cert-dir/tmp- --secure-port10250- --kubelet-preferred-address-typesInternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --metric-resolution15s- --kubelet-insecure-tls # 加上该启动参数image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.7.1 # 国内集群请替换成这个镜像
#end
kubectl apply -f components.yaml
kubectl taint nodes kube-system check:NoExecute- # 去除污点
kubectl get pod -n kube-system | grep metrics-server4.5.5 Kuboard
Kuboard github
#kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 您也可以使用下面的指令唯一的区别是该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
wget https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
vi kuboard-v3-swr.yaml
#start
#KUBOARD_SERVER_NODE_PORT: 30080
KUBOARD_ENDPOINT: http://kuboard-v
#end
kubectl apply -f kuboard-v3-swr.yamlwatch kubectl get pods -n kuboard#访问 Kuboard
#在浏览器中打开链接 http://your-node-ip-address:30080#输入初始用户名和密码并登录#用户名 admin
#密码 Kuboard123# 卸载
kubectl delete -f kuboard-v3-swr.yaml
rm -rf /usr/share/kuboard4.5.6 集群验证
kubectl get po --all-namespaces -owide