热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

kubernetes搭建集群

前言kubernetes,源于希腊文,译为舵手或飞行员,是谷歌公司于2014年推出的生产级别的容器管理工具。由于k和s之间存在8个字母,故kubernetes被简称为k8s。k8s

前言

kubernetes,源于希腊文,译为舵手飞行员,是谷歌公司于2014年推出的生产级别的容器管理工具。

由于k和s之间存在8个字母,故kubernetes被简称为k8s。

k8s是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

具体可参照k8s官网说法:k8s官网

 

由于内容过于多了,我会在以后的文章中再逐次讲到,本文我们着重搭建一个k8s的基础集群。

 

环境

由于我们需要三台主机去搭建环境,故我们采用一主二从模式。

这三台机的信息可以参考下表(括号中添加的是服务的默认端口)
kubernetes 搭建集群

部署

根据上表所列的信息,我们可以这些服务分为两部分:

1. 三台机共有的服务
2. master节点独有的服务

 

下面我们开始部署:

1. 基础准备

1.1 安装docker(三台机)
yum install -y yum-utils device-mapper-persistent-data lvm2 lsof  #基础安装包
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #指定yum的默认源为阿里
yum install -y docker  
systemctl enable --now docker

 

1.2 基础设置(三台机)
systemctl disable --now firewalld  #关闭防火墙
setenforce 0     #关闭selinux
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

swapoff -a     #关闭交换分区
sed -i 's/.*swap.*/#&/' /etc/fstab
cat <  /etc/sysctl.d/k8s.conf  #打开内核设置
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

 

1.3 安装kubeadm/kubelet/kubectl
cat < /etc/yum.repos.d/kubernetes.repo  #指定k8s的安装源为阿里源
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安装kubeadm、kubectl、kubelet,此处也可指定特定版本,如kubectl-1.16.0
yum install -y kubectl kubeadm kubelet 
# 启动kubelet服务
systemctl enable --now kubelet

此时我们需要在master主机检查docker images的情况,看看k8s的各组件是否都存在,具体有:

[root@vm1 ~]# docker images
REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE
registry.aliyuncs.com/google_containers/kube-apiserver            v1.22.0             838d692cbe28        4 days ago          128 MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.22.0             5344f96781f4        4 days ago          122 MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.22.0             3db3d153007f        4 days ago          52.7 MB
registry.aliyuncs.com/google_containers/kube-proxy                v1.22.0             bbad1636b30d        4 days ago          104 MB
registry.aliyuncs.com/google_containers/etcd                      3.5.0-0             004811815584        7 weeks ago         295 MB
registry.aliyuncs.com/google_containers/coredns                   v1.8.4              8d147537fb7d        2 months ago        47.6 MB
registry.aliyuncs.com/google_containers/pause                     3.5                 ed210e3e4a5b        4 months ago        683 kB

这些组件有相同的前缀registry.aliyuncs.com/google_containers, 只有凑齐这些组件之后,才能初始化k8s的master节点。否则在初始化时,会出现以下问题:

[root@vm1 ~]# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.22.0 --apiserver-advertise-address 192.168.1.106 --pod-network-cidr=10.244.0.0/16 --token-ttl 0
[init] Using Kubernetes version: v1.22.0
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR ImagePull]: failed to pull image registry.aliyuncs.com/google_containers/coredns:v1.8.4: output: Trying to pull repository registry.aliyuncs.com/google_containers/coredns ... 
Pulling repository registry.aliyuncs.com/google_containers/coredns
Error: image google_containers/coredns:v1.8.4 not found
, error: exit status 1

此问题是说,某个组件未在registry.aliyuncs.com/google_containers下找到,组件缺失无法初始化。原因你懂的。所以我们只需要去拉个相应的image下来,然后改个名字就可以。

[root@vm1 ~]# docker pull coredns/coredns:1.8.4
[root@vm1 ~]# docker tag coredns/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4
[root@vm1 ~]# docker rmi coredns/coredns:1.8.4

这样就可以搞定这个问题了。
 

2. 初始化

2.1 初始化master主机
kubeadm init --image-repository registry.aliyuncs.com/google_containers --apiserver-advertise-address 192.168.1.106 --apiserver-bind-port 6443 --kubernetes-version 1.22.0 --pod-network-cidr 10.244.0.0/16 --token-ttl 0 #此处token-ttl=0表示此token永远有效。

然后等4分钟左右,完成之后就会出现以下信息:

Your Kubernetes control-plane has initialized successfully!

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 192.168.1.106:6443 --token jx4yyr.r2cyxjfesfz43wwz \
        --discovery-token-ca-cert-hash sha256:ab78736522a383c49f7a4fc9c55fdd5ebde8a19fb71ec2ed3b9e5d3133f2b53e 

出现上述信息说明master节点初始化成功,我们按照它的指引,使用相应的用户运行这三行命令:

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

即可使用kubectl命令。
 

2.2 将node节点加入到集群中
在另外两台node节点上,运行kubeadm join命令,即可将node节点加入到集群中。
kubeadm join 192.168.1.106:6443 --token jx4yyr.r2cyxjfesfz43wwz \
        --discovery-token-ca-cert-hash sha256:ab78736522a383c49f7a4fc9c55fdd5ebde8a19fb71ec2ed3b9e5d3133f2b53e 

需要注意的是,若不加--token-ttl参数,此token默认的有效期是24小时,过期后需要在master节点重新生成新的join命令。
生成的命令如下:

kubeadm token create -ttl 0

 

2.3 安装网络插件
虽然node节点已经被纳入集群,但是它们之间仍然无法通信,原因是尚未安装内网插件。 此处我们需要安装它,才可以使得集群内部正常通信。

常用的网络插件有flannel、calico、 weave,本例使用calico,原因是比较方便。

我们首先下载一个配置文件模板calico.yaml,然后修改配置,将CALICO_IPV4POOL_CIDR的值修改为init时的CIDR值,作为内网的ip池, 最后启动它。

[root@vm1 ~]# wget https://docs.projectcalico.org/manifests/calico.yaml
            - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"
[root@vm1 ~]# kubectl apply -f calico.yaml #修改之后再启动

 

3. 查看状态

3.1 查看nodes节点状态
在node节点都加入集群,且启动calico之后,我们可以查看集群状态。
[root@vm1 ~]# kubectl get nodes
NAME   STATUS   ROLES                  AGE     VERSION
vm1    Ready    control-plane,master   3h54m   v1.22.0
vm2    Ready                     3h54m   v1.22.0
vm3    Ready                     3h54m   v1.22.0

三台机都是ready状态,说明搭建成功。

 

3.2 查看service状态
[root@vm1 ~]# kubectl get svc
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.96.0.1               443/TCP        3h55m

有kubernetes的服务,成功。

 

后记

这篇文章我想写很久了,今天也是将其完成,非常高兴。

由于k8s真的很复杂,调试过程也是各种痛苦,所以我省略了很多内容,以后有机会再跟大家讲。

最后说一句,Hyper-V是牛逼啊,我所有的操作居然都保留下来了,所以我可以查到非常久远的记录,也使得这篇文章相对详实不少。


推荐阅读
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • 本文|层面_Kubernetes概述
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Kubernetes概述相关的知识,希望对你有一定的参考价值。前言本文搜集大量关于Kuber ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • k8s进阶之搭建私有镜像仓库
    企业级私有镜像仓 ... [详细]
  • k8shelm官网:https:helm.sh点击charts:https:artifacthub.iopackagessearch?sortrelevance&page11.1h ... [详细]
  • kubelet配置cni插件_Kubernetes新近kubectl及CNI漏洞修复,Rancher 2.2.1发布
    今天,Kubernetes发布了一系列补丁版本,修复新近发现的两个安全漏洞CVE-2019-1002101(kubectlcp命令安全漏洞)和CVE-2 ... [详细]
  • “自主设计与实施的故障注入微服务Sidecar,欢迎大佬批评指正!”
    “故障注入Sidecar“——为您的微服务注入故障以验证集群性能!由于导师和实验室师兄们的科研需要,本人专门以Sidecar的模式设计了一个用于错误注入的微服务模块。该模块可以与任 ... [详细]
  • |NO.Z.00394|——————————|CloudNative|——|KuberNetes&CI/CD.V32|——|Jenkins.v12|自动构建NodeJs应用.v06|
    一、NodeJS自动发版###---Jenkins执行NodeJS自动发版#~~~Jenkins——Dashboard——Deploy:true——Build——END二、 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • KVM配置调整
    一内存CPU调整1.1增大虚拟机内存[root@k8s-01~]#virshshutdownvm01-centos7域vm01-centos7被关闭[root@k8s-01~]#v ... [详细]
  • 背景信息公司目前有40人,研发人员占比60-70% ... [详细]
author-avatar
水瓶颜如_991
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有