DevOps系列文章 - K8S知识体系

news2024/10/6 4:02:50

 环境搭建部分:

1、安装前的准备工作

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 查看hostname并修改

hostname   # 查看本机hostname
hostnamectl set-hostname k8s-master # 把本机名设置成k8s-master
hostnamectl status  # 查看修改结果
echo "127.0.0.1 $(hostname)" >> /etc/hosts  # 修改hosts文件

# 关闭selinux(linux的安全机制)
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

# 关闭swap(关闭内存交换)
swapoff -a
sed -ri 's/.*swap.*/#&/' '/etc/fstab'
free -m  # 检查,确保swap里面没有东西

# 配置桥接流量
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

2. docker安装

下载关于Docker的依赖环境

yum -y install yum-utils device-mapper-persistent-datalvm2

设置一下下载Docker镜像源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker

下面这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度

yum makecache fast

yum install docker-ce docker-ce-cli containerd.io


启动Docker服务

systemctl start docker

设置开机自动启动

systemctl enable docker

测试验证

docker run hello-world

3. 安装k8s

# 配置k8s的yum源
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
gpg_key=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF


#  卸载旧版本
yum remove -y kubelet kubeadm kubectl

# 查看可以安装的版本
yum list kubelet --showduplicates | sort -r   

# 安装kubernetes
yum install -y kubelet kubeadm kubectl

# 设置开机启动kubelet
systemctl enable kubelet

# 启动kubelet
systemctl start kubelet

# 查看kubelet状态
systemctl status kubelet  # kubelet进入无限死循环状态

如果执行安装kubelet失败。可能是我阿里云的yum源配置有问题

4、配置master节点

# 查看kubeadm需要下载的镜像
kubeadm config images list

## 需要下载的镜像
k8s.gcr.io/kube-apiserver:v1.23.1
k8s.gcr.io/kube-controller-manager:v1.23.1
k8s.gcr.io/kube-scheduler:v1.23.1
k8s.gcr.io/kube-proxy:v1.23.1
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6

# 挨个下载以上镜像,由于是国外镜像,使用阿里云镜像仓库下载
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6

# 因为coredns是带二级目录的,所以要多执行这一步
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.6

# 创建k8s集群

# 查看eth0的inet私有网络地址,复制出来填入apiserver-advertise-address
ip a

# 初始化一个master节点
# image-respository  镜像仓库的地址
# service-cidr pod-network-cidr 设定两个子网范围,不能和apiserver冲突
kubeadm init \
--apiserver-advertise-address=172.31.43.126  \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.23.1 \
--service-cidr=172.100.0.0/16 \
--pod-network-cidr=192.168.0.0/16 \
--ignore-preflight-errors=all
  • 如果:出现错误kubelet连接失败
  • 解决方法:
  • sudo docker info|grep Cgroup # 查看docker的 Cgroup Driver,显示为cgroupfs,而kubelet为systemd
    vim /etc/docker/daemon.json # 加入"exec-opts": ["native.cgroupdriver=systemd"]
    systemctl daemon-reload
    systemctl restart docker
    systemctl restart kubelet

    执行成功显示如下:

  • 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
    
    Alternatively, if you are the root user, you can run:
    
      export KUBECONFIG=/etc/kubernetes/admin.conf
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
    
    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join 172.31.43.126:6443 --token y5nwzd.kegm5jldmaep9i7z \
            --discovery-token-ca-cert-hash sha256:f14ca1c0c3321d4c1ee7386eab8df759c34808ac0f902619fee4c506adcf6d9d 

    根据提示执行

  • 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
    
    # 并且安装插件,我这里安装Calico
    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    
    # 命令检查,获取集群中所有部署好的应用,等待他们都是running状态
    kubectl get pod -A
    
    # 查看集群里面所有的节点
    kubectl get nodes

    5.其他节点加入集群

  • 根据master节点的提示,可以在其他node节点使用命令加入集群
kubeadm join 172.31.43.126:6443 --token y5nwzd.kegm5jldmaep9i7z \
        --discovery-token-ca-cert-hash sha256:f14ca1c0c3321d4c1ee7386eab8df759c34808ac0f902619fee4c506adcf6d9d 

该token只有两个小时有效,如果两个小时内未使用,以后想加入集群,可以使用以下命令重新获取token

kubeadm token create --print-join-command
  • 给集群加标签
kubectl label node k8s-node1 node.kubernetes.io/worker=''
# k8s-node1是节点的hostname
# node.kubernetes.io是固定写法不可变
# worker是给节点加的标签
# =''无所谓,''里面可以随便写

# 去除标签采用命令
kubectl label node k8s-node1 node.kubernetes.io/worker-
  • 设置ipvs模式
    因为linux默认采用的是iptables模式,性能开销非常大,当你集群节点一多,每个节点的kube-proxy都要去同步iptables,可能一天都同步不完。
# 查看kube-proxy默认的模式
kubectl logs -n kube-system kube-proxy-28xv4

# 打开编辑kube-proxy的配置文件
kubectl edit cm kube-proxy -n  kube-system

# 找到如下配置:
ipvs:
   excludeCIDRs: null
   minSyncPeriod: 0s
   scheduler: ""
   strictARP: false
   syncPeriod: 0s
   tcpFinTimeout: 0s
   tcpTimeout: 0s
   udpTimeout: 0s
kind: KubeProxyConfiguration
metricsBindAddress: ""
mode: ""

mode中加入ipvs,保存后退出。

  • 重启kube-proxy
kubectl get pod -A -o wide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS          AGE   IP                NODE         NOMINATED NODE   READINESS GATES
kube-system   calico-kube-controllers-85b5b5888d-pg8bn   1/1     Running   692 (171m ago)    6d    192.168.235.195   k8s-master   <none>           <none>
kube-system   calico-node-xdc6v                          1/1     Running   318 (171m ago)    6d    172.31.43.126     k8s-master   <none>           <none>
kube-system   coredns-65c54cc984-6mb7v                   1/1     Running   104 (171m ago)    6d    192.168.235.196   k8s-master   <none>           <none>
kube-system   coredns-65c54cc984-sfhnj                   0/1     Pending   0                 6d    <none>            <none>       <none>           <none>
kube-system   etcd-k8s-master                            1/1     Running   17 (171m ago)     6d    172.31.43.126     k8s-master   <none>           <none>
kube-system   kube-apiserver-k8s-master                  1/1     Running   270 (171m ago)    6d    172.31.43.126     k8s-master   <none>           <none>
kube-system   kube-controller-manager-k8s-master         1/1     Running   872 (3m41s ago)   6d    172.31.43.126     k8s-master   <none>           <none>
kube-system   kube-proxy-kbw49                           1/1     Running   1 (171m ago)      6d    172.31.43.126     k8s-master   <none>           <none>
kube-system   kube-scheduler-k8s-master                  1/1     Running   845 (3m34s ago)   6d    172.31.43.126     k8s-master   <none>           <none>

# 找到kube-proxy-kbw49 ,删除他,不用担心他会自动重启,配置就生效了,-n后面跟的是他的命名空间。
kubectl delete pod kube-proxy-kbw49 -n kube-system
# 等待重启后重新查看状态
kubectl get pod -A|grep kube-proxy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux复习 / 文件系统QA梳理

文章目录前言Q&A文件的基本理解Q&#xff1a;谈谈你是怎么理解文件的&#xff1f;Q&#xff1a;什么是当前工作路径&#xff1f;Q&#xff1a;文件与操作系统有着怎样的关系&#xff1f;Q&#xff1a;为什么语言要封装系统接口&#xff1f;文件描述符Q&#xff1a;系统和进…

基于JSP的网上购物系统的设计与实现(论文+源码)_kaic

摘 要 近些年来&#xff0c;社会的生产力和科技水平在不断提高&#xff0c;互联网技术也在不断更新升级&#xff0c;网络在人们的日常生活中扮演着一个重要角色&#xff0c;它极大地方便了人们的生活。为了让人们实现不用出门就能逛街购物&#xff0c;网络购物逐渐兴起慢慢变得…

ES6(声名、解构)

参考文档&#xff1a; ES6 入门教程https://es6.ruanyifeng.com/ 注意&#xff1a;内容较多&#xff1a;只看引用部分的内容即可&#xff08;代码一眼过搭配理解&#xff09; 一、变量声明 1. let let声名的变量只在所处于的块级有效 let a 10; if (true) {let b 20;cons…

人工智能 AI 绘画发展史

到了去年4月, 著名人工智能团队OpenAI 也发布了新模型 DALLE 2代&#xff0c;该名称来源于著名画家达利&#xff08;Dal&#xff09;和机器人总动员&#xff08;Wall-E&#xff09;, 同样支持从文本描述生成效果良好的图像. 而很多读者对AI绘画开始产生特别的关注, 或许是从以下…

有趣的Hack-A-Sat黑掉卫星挑战赛——AES加密通信链路侧信道攻击leaky

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加&#xff0c;太空已经成为国家赖以生存与发展的命脉之一&#xff0c;凝聚着巨大的国家利益&#xff0c;太空安全的重要性日益凸显[1]。而在信息化时代&#xff0c;太空安…

如何将Springboot项目通过IDEA打包成jar包,并且转换成可执行文件

首先在IDEA打开你的项目&#xff0c;需要确认项目可以正常运行&#xff0c;然后点击页面右侧的Maven,运行Lifecycle下的package, 此时在项目的target目录下就可以看到一个jar包 这个时候你可以在jar包所在目录下执行cmd窗口&#xff0c;运行 java -jar campus-market-0.0.1-S…

BUUCTF-SimpleRev

下载文件 查壳 没有加壳 并且是64 放入ida64 SHIFTF12 访问字符串 得到关键字符串 双击 然后 CRTLX 查找交互 F5 反编译 得到了代码 开始代码审计 我们可以发现有两个十六进制的东西 r 对其转换为字符串 srcSLCDN v9wodah 然后继续往下看 发现textjoin函数 我们进入看…

STM32+AT24C02实现易变参数存储

AT24C02是一个2K位串行CMOS E2PROM&#xff0c; 内部含有256个8位字节存储单元&#xff0c;该器件通过IIC总线接口进行操作&#xff0c; AT24C02把存储空间分为 32 页&#xff0c;每页可存储8个字节的数据&#xff0c;具有硬件数据写保护功能&#xff0c;100万次擦写&#xff0…

Docker理论总结

目录 容器技术的演变 物理机时代 虚拟化时代 容器化时代 容器化技术的应用场景 Docker介绍与基本概念 标准化的应用打包 Docker的发展 Docker是容器化平台 Docker体系架构 容器与镜像 Docker执行流程 容器内部 Tomcat容器内部结构 在容器中执行命令 容器生命周…

( “树” 之 DFS) 104. 二叉树的最大深度 ——【Leetcode每日一题】

104. 二叉树的最大深度 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]&#xff0c; 返回它的最大深度 3 。 思路&am…

深度学习TensorFlow

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

redis整理之-持久化

redis整理之-持久化5. 持久化5.1 持久化简介5.1.1 场景-意外断电5.1.2 什么是持久化5.2 RDB5.2.1 save指令5.2.2 bgsave指令5.2.3 save配置自动执行5.2.4 RDB三种启动方式对比5.3 AOF5.3.1 AOF概念5.3.2 AOF执行策略5.3.3 AOF重写5.3.4 AOF工作流程及重写流程5.4 RDB与AOF区别5…

python开发环境的安装,PyCharm+python解释器

文章目录注意&#xff1a;软件打包下载&#xff1a;PyCharm的下载与安装下载安装python解释器的下载与安装下载安装PyCharm软件设置注意&#xff1a; 以下是Windows下的安装&#xff0c;Linux以及其他操作系统下的安装请类比参照&#xff01; 软件打包下载&#xff1a; PyCh…

主干网络backbone讲解—— Conv4与Resnet12

1 Conv4 在一些论文中&#xff0c;也称为Conv-64F。其中“64F”表示网络中使用了64个滤波器&#xff08;filters&#xff09; 它包含 4 个重复的卷积块&#xff0c;在每个块中包含&#xff1a; 一个 kernel3&#xff0c;stride1&#xff0c;padding1的卷积层&#xff1b;一个…

jquery中的ajax方法怎样通过JSONP进行远程调用

关于JSONP的概念以及为什么要使用JSONP您可以参考JSONP教程&#xff0c;本文的重点在于演示下在JQUERY中的Ajax方法怎样通过JSONP进行远程调用。 $.ajax的参数 首先介绍下$.ajax的参数&#xff1a; type&#xff1a;请求方式 GET/POST url:请求地址 async:布尔类型&#xff…

第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组题解+个人总结

提示&#xff1a;此题解为本人自己解决&#xff0c;如有差错请大家多多指正。 文章目录题解总结一、幸运数1.试题2.解法3.代码二、[有奖问答](https://blog.csdn.net/A2105153335/article/details/130038980?spm1001.2014.3001.5501)三、[平方差](https://blog.csdn.net/A2105…

spring 随笔 ioc/di 4-Bean生命周期钩子

0. RUN&#xff0c;或8RUN&#xff0c;是每年都会思考的问题 Spring框架后置处理器PostProcessor详解 BeanDefinitionRegistryPostProcessor 扩展接口 动态注册bean AOP的高级特性targetSource AnnotationAwareAspectJAutoProxyCreator#postProcessBeforeInstantiation源码解析…

第五十九章 线段树(二)

第五十九章 线段树&#xff08;二&#xff09;一、懒标记&#xff08;lazy_tag&#xff09;1、作用2、思路二、结构体定义三、带有懒标记的函数操作1、pushup函数2、build函数3、modify函数4、pushdown函数5、query函数四、代码一、懒标记&#xff08;lazy_tag&#xff09; 1、…

redis五大基本数据类型之(源码分析)

redis五大数据结构StringHashsetListZset总结String String 是最基本的 key-value 结构&#xff0c;key 是唯一标识&#xff0c;value 是具体的值&#xff0c;value其实不仅是字符串&#xff0c; 也可以是数字&#xff08;整数或浮点数&#xff09;&#xff0c;value 最多可以…

远程桌面连接是什么?远程桌面连接使用教程

有时候电脑出现各类网络连接、网址访问出错问题&#xff0c;自己无法解决的情况下&#xff0c;常常会求助其他擅长IT的同事或朋友&#xff0c;要么自己通过社交工具在线沟通、要么抱着电脑找人家解决。然而&#xff0c;通过远程桌面完全可以让朋友同事远程帮自己查看电脑问题&a…