首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

k8s搭建部署(超详细)

  • 24-03-17 08:03
  • 3134
  • 5821
blog.csdn.net

简介

Kubernetes是Google 2014年创建管理的,是Google 10多年大规模容器管理技术Borg的开源版本。它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

通过Kubernetes你可以:

  • 快速部署应用
  • 快速扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用

Kubernetes 特点:

  • 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
  • 可扩展: 模块化, 插件化, 可挂载, 可组合
  • 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

快速搭建

1. 安装要求
  • 在开始之前,部署Kubernetes集群机器需要满足以下几个条件:
  • 3台以上机器,操作系统 CentOS7.7以上64位系统
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 禁止swap分区
2. 部署内容
  • kubernetes1.16.2版本,docker19.03版本
  • 在所有节点上安装Docker和kubeadm,kubenet
  • 部署Kubernetes Master
  • 部署容器网络插件
  • 部署 Kubernetes Node,将节点加入Kubernetes集群中
3. 准备环境
这里我准备了三台机器

centos版本不要太低否者可能会出问题(最好7.7以上)

ip: 10.0.1.176 主机名:test-docker-176 系统:centos7.7 配置:8核8G
ip: 10.0.1.177 主机名:test-docker-177 系统:centos7.7 配置:8核8G
ip: 10.0.1.178 主机名:test-docker-178 系统:centos7.7 配置:8核8G
  • 1
  • 2
  • 3
三台主机都需要执行如下命令

关闭防火墙和selinux

systemctl stop firewalld

systemctl disable firewalld

sed -i 's/enforcing/disabled/' /etc/selinux/config

setenforce 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

关闭swap分区

swapoff -a    # 临时关闭

vim /etc/fstab # 注释到swap那一行  永久关闭
  • 1
  • 2
  • 3

添加主机名与IP对应关系(三台主机都执行)

echo '''
10.0.1.176 k8s-master-176
10.0.1.177 k8s-node-177
10.0.1.178 k8s-node-178
''' >> /etc/hosts
  • 1
  • 2
  • 3
  • 4
  • 5

各自修改主机名(从176-178各自顺序执行)

hostnamectl set-hostname k8s-master-176

hostnamectl set-hostname k8s-node-177

hostnamectl set-hostname k8s-node-178
  • 1
  • 2
  • 3
  • 4
  • 5

将桥接的IPv4流量传递到iptables的链(三台主机都执行):

以下net.ipv4.ip_forward如存在=0,修改为1即可

cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
所有机器升级内核到最新

详细内核升级步骤:linux(centos7)内核升级 (低内核会导致docker和k8s运行不稳定)

4. 所有节点安装Docker/kubeadm/kubelet
Docker安装

参考docker安装使用文档进行安装:docker部署搭建 (注意:这里docker可以先安装18.09版本,yum install -y docker-ce-18.09 docker-ce-cli-18.09 containerd.io,后续有问题再升级到19.03.9版本,防止集成到k8s出现bug,这里我出现过k8s监控服务无法获取资源信息)

Docker配置修改,设置cgroup驱动,这里用systemd

配置修改为如下

vim /etc/docker/daemon.json

{
  "graph": "/data/docker",
  "registry-mirrors": ["https://01xxgaft.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

重启docker

systemctl restart docker
  • 1
5. 添加k8s阿里云YUM软件源

所有机器执行

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/kubernetes/yum/doc/rpm-package-key.gpg
EOF[kubernetes]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
安装kubeadm,kubelet和kubectl

所有机器执行

yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2

systemctl start kubelet

systemctl enable kubelet
  • 1
  • 2
  • 3
  • 4
  • 5
6. 部署k8s的master和node节点
部署master节点,在10.0.1.176执行

初始化master节点

kubeadm init   --apiserver-advertise-address=10.0.1.176 --image-repository registry.aliyuncs.com/google_containers   --kubernetes-version v1.16.0   --service-cidr=10.140.0.0/16 --pod-network-cidr=10.240.0.0/16
  • 1

网段问题,两个网段不要重,后面是/16,不要与当前机器网段一样

这里执行完会生成一串命令用于node节点的加入,记录下来,接着执行以下命令

mkdir -p $HOME/.kube

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

chown $(id -u):$(id -g) $HOME/.kube/config
  • 1
  • 2
  • 3
  • 4
  • 5
部署node节点,在10.0.1.177和178执行

这里复制上面生成的一串命令,我这里只是示例,命令根据你实际生成的复制去node节点执行

kubeadm join 10.0.1.176:6443 --token 1146ci.3elqkwg3b2sdqp6l --discovery-token-ca-cert-hash sha256:3562d07fbe47d39ddc04c9170464e2699f1328c08ded2bb0198bde9a55ce8e5e
  • 1
7. 安装网络插件(CNI)

下面两种插件二选一,master上执行,如果是云服务器建议按照flannel,calico可能会和云网络环境有冲突

安装flannel插件(轻量级用于快速搭建使用,初学推荐)

下载yaml文件

wget https://github.com/xuwei777/xw_yaml/blob/main/kube-flannel.yml
  • 1

修改net-conf.json下面的网段为上面init pod-network-cidr的网段地址(必须正确否则会导致集群网络问题)

sed -i 's/10.244.0.0/10.240.0.0/' kube-flannel.yml
  • 1

修改完安装插件,执行

kubectl apply -f kube-flannel.yml

kubectl get pods -n kube-system
  • 1
  • 2
  • 3
安装calico插件(用于复杂网络环境)

下载yaml文件

wget https://github.com/xuwei777/xw_yaml/blob/main/calico-3.9.2.yaml
  • 1

修改配置文件的网段为上面init pod-network-cidr的网段地址(必须正确否则会导致集群网络问题)

sed -i 's/192.168.0.0/10.240.0.0/g' calico-3.9.2.yaml
  • 1

修改完安装插件,执行

kubectl apply -f calico.yaml

kubectl get pod --all-namespaces -o wide
  • 1
  • 2
  • 3
8. 测试kubernetes集群
在Kubernetes集群中创建一个pod,验证是否正常运行

创建一个pod,开放对外端口访问,这里会随机映射一个端口

kubectl create deployment nginx --image=nginx

kubectl expose deployment nginx --port=80 --type=NodePort
  • 1
  • 2
  • 3

查看pod状态,必须是running状态而且ready是1,并查看nginx svc的80端口映射到了哪个端口

kubectl get pod,svc
  • 1

访问任意机器的刚刚查看的映射端口,看看是否nginx已经运行

9. k8s常用命令

查看pod,service,endpoints,secret等等的状态

kubectl get 组件名      # 例如kubectl get pod   查看详细信息可以加上-o wide   其他namespace的指定 -n namespace名
  • 1

创建,变更一个yaml文件内资源,也可以是目录,目录内包含一组yaml文件(实际使用中都是以yaml文件为主,直接使用命令创建pod的很少,推荐多使用yaml文件)

kubectl apply -f xxx.yaml    # 例如kubectl apply -f nginx.yaml   这里是如果没有则创建,如果有则变更,比create好用
  • 1

删除一个yaml文件内资源,也可以是目录,目录内包含一组yaml文件

kubectl delete -f xxx.yaml    # 例如kubectl delete -f nginx.yaml
  • 1

查看资源状态,比如有一组deployment内的pod没起来,一般用于pod调度过程出现的问题排查

kubectl describe pod pod名     # 先用kubectl get pod查看  有异常的复制pod名使用这个命令
  • 1

查看pod日志,用于pod状态未就绪的故障排查

kubectl logs pod名     # 先用kubectl get pod查看  有异常的复制pod名使用这个命令
  • 1

查看node节点或者是pod资源(cpu,内存资源)使用情况

kubectl top 组件名     # 例如kubectl top node  kubectl top pod
  • 1

进入pod内部

kubectl exec -ti pod名 /bin/bash      # 先用kubectl get pod查看  有需要的复制pod名使用这个命令
  • 1
10. k8s高可用

如果已经掌握k8s单master节点部署想学习高可用部署,参考 k8s高可用搭建部署


转自:https://blog.csdn.net/qq_40954652/article/details/123208590

注:本文转载自blog.csdn.net的Archie_java的文章"https://blog.csdn.net/qq_43842093/article/details/136017848"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

120
运维
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top