K8s(kubernetes)集群搭建及dashboard安装、基础应用部署

这篇具有很好参考价值的文章主要介绍了K8s(kubernetes)集群搭建及dashboard安装、基础应用部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基础介绍

概念

本质是一组服务器集群,在集群每个节点上运行特定的程序,来对节点中的容器进行管理。实现资源管理的自动化。

功能

  • 自我修复
  • 弹性伸缩
  • 服务发现
  • 负载均衡
  • 版本回退
  • 存储编排

组件

  • 控制节点(master)-控制平面

APIserver:资源操作的唯一入口
scheduler :集群资源调度,将Pod调度到node节点上
controlManager:维护集群状态,程序部署状态
Etcd:存储各种资源对象信息(数据库-可替换)

  • 工作节点(node)-数据平面,提供数据环境

Kubelet:负责维护生命周期,创建、更新、销毁docker容器
Docker:容器操作
KuberProxy:集群内部服务发现和负载均衡

概念

  • Master:控制节点

  • Node:工作节点

  • Pod: 最小工作单元,容器运行在pod上

  • Controller:控制器,实现对pod的管理

  • Service:pod的统一入口

  • Label:标签,对pod分类

  • Namespace:命名空间,隔离pod环境

工作流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMDSFZa4-1689145689993)(C:\Users\ricar\AppData\Roaming\Typora\typora-user-images\image-20230618235232615.png)]

集群搭建

类型:

  • 一主多从

  • 多主多从

基于三台机器搭建集群

环境配置

IP

192.168.1.220 ricardo-1    #主节点
192.168.1.221 ricardo-2    #从节点
192.168.1.222 ricardo-3    #从节点

关闭防火墙

#临时关闭
systemctl stop firewalld
#永久关闭
systemctl disable firewalld

关闭selinux

#永久关闭
sed -i '/selinux/s/enforcing/disabled/' /etc/selinux/config
#临时关闭
setenforce 0

关闭swap分区

# 临时关闭
swapoff -a   
# 注释到swap那一行  永久关闭
vim /etc/fstab 

设置主机名称

hostnamectl set-hostname ricardo-1
hostnamectl set-hostname ricardo-2
hostnamectl set-hostname ricardo-3

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

cat >> /etc/hosts << EOF
192.168.1.220 ricardo-1
192.168.1.221 ricardo-2
192.168.1.222 ricardo-3
EOF

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

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

时间同步

yum install ntpdate -y
ntpdate time.windows.com

Docker安装

安装需要的软件包, yum-util 提供yum-config-manager功能

yum install -y yum-utils device-mapper-persistent-data lvm2

设置 yum 源(阿里云)

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

选择docker版本并安装

yum list docker-ce --showduplicates | sort -r

安装

sudo yum install -y docker-ce-19.03.0 docker-ce-cli-19.03.0

配置镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
	"exec-opts": ["native.cgroupdriver=systemd"],
	"registry-mirrors": ["https://5w5kf152.mirror.aliyuncs.com"]
}
EOF

启动 Docker 并设置开机自启

systemctl restart docker && systemctl enable docker

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

kubeadm、kubelet、kubectl 的安装(都安装)

版本对应关系

k8s与docker版本对应关系

#下载软件
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0


#开机自启动
systemctl enable kubelet

在 Master 节点中部署集群-(只在master节点执行)

kubeadm init --kubernetes-version=1.18.0  \
--apiserver-advertise-address=192.168.1.220   \
--image-repository registry.aliyuncs.com/google_containers  \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16

dashboard k8s,云原生,kubernetes,容器,云原生
dashboard k8s,云原生,kubernetes,容器,云原生

开启 kubectl 工具的使用(该命令在master节点中执行)

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

将 node 节点加入 master 中的集群(该命令在工作节点node中执行)。

kubeadm join 192.168.1.220:6443 --token 88gcei.gmh12c7jmh6ksgj6 \
 --discovery-token-ca-cert-hash sha256:8a3f8919183a5ff0fe8626615195a044a74b0ea3a004e41c013095d28eea83dc 
#重新创建
kubeadm token create --print-join-command

安装网络插件(CNI) 下面两个中选一个,

calico

# 下载calico插件的yaml
wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml --no-check-certificate


#修改定义pod网络CALICO_IPV4POOL_CIDR的值
vim calico.yaml
# 修改定义pod网络CALICO_IPV4POOL_CIDR的值和kubeadm init pod-network-cidr的值一致
## 取消注释
- name: CALICO_IPV4POOL_CIDR
  value: "10.122.0.0/16"


kubectl apply -f calico.yaml

#查看运行状态
kubectl get pods -n kube-system


[root@ricardo-1 k8s]# kubectl get nodes
NAME        STATUS   ROLES    AGE   VERSION
ricardo-1   Ready    master   43m   v1.18.0
ricardo-2   Ready    <none>   41m   v1.18.0
ricardo-3   Ready    <none>   41m   v1.18.0

dashboard k8s,云原生,kubernetes,容器,云原生

dashboard k8s,云原生,kubernetes,容器,云原生

fannel(如果用了上面的calico就不要用这个了)

# 下载flannel插件的yml
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 修改kube-flannel.yml中的镜像仓库地址为国内源
sed -i 's/quay.io/quay-mirror.qiniu.com/g' kube-flannel.yml

# 安装网络插件
kubectl apply -f kube-flannel.yml

控制台-dashboard 安装

安装

#版本地址
https://github.com/kubernetes/dashboard/releases?page=1

#下载配置文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

#修改 39行
spec:
 type: NodePort
 ports:
   - port: 443
     targetPort: 8443
     nodePort: 31001
 selector:
   k8s-app: kubernetes-dashboard

#启动
kubectl apply -f recommended.yaml

#查看
kubectl get pods -n kubernetes-dashboard

#打开网页
https://192.168.1.220:31001/
鼠标点击空白处,输入:thisisunsafe 

#服务器生成token(master节点)

#1、创建账号
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard


#2、创建集群角色权限绑定
kubectl create clusterrolebinding kube-dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin

#3、获取账号token
kubectl get secret -n kubernetes-dashboard | grep dashboard-admin

kubectl describe secrets dashboard-admin-token-zcvnc -n kubernetes-dashboard

#token  粘到 web端
eyJhbGciOiJSUzI1NiIsImtpZCI6InE5NHpxbWhwc0FmVjhhSUZ4bElhZ19JbXVfSXpPNkFhVHFyUE9vc1A5MkUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4temN2bmMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMTc5YjdmYzItOWU2Ny00MTcwLThkYmYtZGJlODU0MzNhM2MxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9.f_klKo1n-5cg0UEFodRojtd5hTs3BTL6tFNi0G6aZWalyJuQioodkM3pW1I2d7HaIaKP61XJPRyq9YZEQp9SHsa_guCXMF83JmF5yG8G0hAQbDWyO7DnaFnoGK1RcaH5PioyVOrCOZEYwzwEPtObeXeqnVzNFI4kR1cfIpRefpuhm8dKP06PNpiQRMhLPXWThw1LmCL0OmnPlKyVJJNi2toPS7jxG3LFMhJZR_DA3jOf9kFUXL_v29V2cRzRIU1_cN0t3wsmrPahV3D7LlHAnLVRaV6L-C6X5_l88WwDebDTm4Ag20MLLRE5zeLq6lFh38FWy86IOivinSavysWuwA

#修改token持续时间(默认 15分钟 600s)
修改命名空间  kubernetes-dashboard   deployment  kubernetes-dashboard

contaiiners下 args参数

新增 --token-ttl=43200


#日志
kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-7b544877d5-r4jjw

dashboard k8s,云原生,kubernetes,容器,云原生
dashboard k8s,云原生,kubernetes,容器,云原生
dashboard k8s,云原生,kubernetes,容器,云原生

常用命令

# 获得节点
kubectl get nodes

#查看pod
kubectl get pods -A
kubectl get pods -n kube-system
kubectl get pod -n kube-system -o wide

#pod状态
kubectl describe pod coredns-57d4cbf879-xgk2f -n kube-system
kubectl logs -f coredns-57d4cbf879-xgk2f -n kube-system

#查看状态
systemctl status kubelet

systemctl status kubelet.service --now

#日志  -  节点日志
journalctl -f -u kubelet
journalctl -u kubelet

#开机自启动
systemctl enable  kubelet
#重启
systemctl restart kubelet
#查看状态
systemctl status  kubelet

#查看命名空间
kubectl get ns

#创建空间
kubectl create namespace dev

#重置
kubeadm reset
#reset后删除
rm -rf $HOME/.kube


# 查看k8s的pod网段和svc网段  kubeadm的配置信息存在config-map中
kubectl -n kube-system describe cm kubeadm-config |grep -i pod
# 查看pod网段和svc网段
kubectl -n kube-system describe cm kubeadm-config |grep -i net


部署第一个应用-Nginx

基础介绍

概念

  • Namespace 表示命名空间:应用需在命名空间下
  • Deployment :即发布pod,因为pod是最小单位
  • Service: 暴露服务到外部的方式,包括LoadBlancer Service、NodePort Service、Ingress,即配置一个对外访问的入口

基础流程

因此,部署应用的步骤基本是 先创建命名空间, 再创建pod,再创建service

1、创建命名空间

文件:nginx-namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
 name: dev
 labels:
   name: dev

名词:

kind:Namespace 表示yaml文件创建的是命名空间

metadata表示命名空间的元信息

metadata.name 是命名空间的名称 取值dev

metadata.labels 是命名空间的标签 name=dev

应用

kubectl create -f namespace-dev.yaml
2、创建Deployment

文件:deployment-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
 labels:
   app: nginx
 name: nginx-deployment1
 namespace: dev
spec:
 replicas: 3
 selector:
   matchLabels:
     app: nginx
 template:
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - image: nginx:1.14.0
       ports:
       - containerPort: 80
       name: nginx

以下参数自定义时可选

   spec:
     containers:
     - image: nginx:1.14.0
       ports:
       - containerPort: 80
       name: nginx
       volumeMounts: #k8s的master服务器对应的路径,必须存在
       - name: conf
         mountPath: /etc/nginx/nginx.conf
       - name: log
         mountPath: /var/log/nginx
       - name: html
         mountPath: /etc/nginx/html
     tolerations:
     - key: "key"
       operator: "Equal"
       value: "nginx"
       effect: "NoSchedule"
     volumes: #k8s的node对应的路径
     - name: conf #和volumeMounts中的内容要对应
       hostPath:
         path: /Users/w/kube/nginx/conf/nginx.conf
    - name: log #和volumeMounts中的内容要对应
       hostPath:
         path: /Users/w/kube/nginx/logs
         type: Directory
     - name: html #和volumeMounts中的内容要对应
       hostPath:
         path: /Users/w/kube/nginx/html
         type: Directory

名词:

kind: Deployment表示yaml文件创建的是一个Deployment发布
metadata表示这个deployment的元信息
metadata.name 是deployment的名称 nginx-deployment1
metadata.labels 是deployment的标签 即:app=nginx
metadata.namespace 是deployment的命名空间,此处选择的是第一步创建的命名空间nginx

spec: 表示deployment的详细参数配置说明
spec.replicas 是启动几个pod节点
spec.template.spec 是deployment选择模块的详细说明
spec.template.spec.containers 表示选择的容器是什么,此处是nginx的docker镜像 nginx:1.14.0,容器的端口设置 containerPort: 80, volumeMounts表示绑定的文件和目录

spec.template.spec.volumes 表示选择的容器挂载的宿主机的文件和目录 conf, log和html

应用:

kubectl create -f deployment-nginx.yaml #初次创建
kubectl apply -f deployment-nginx.yaml #后期更新

#查看
kubectl get pods -n dev
kubectl describe pod nginx-deployment1-6cb86fb6b7-kkpbw -n dev
kubectl delete pod nginx-deployment1-6cb86fb6b7-txkkj -n dev
kubectl describe deployment nginx -n dev
3、创建service

文件:service-nginx.yaml

apiVersion: v1
kind: Service
metadata:
 labels:
  app: nginx
 name: nginx-deployment1
 namespace: dev
spec:
 ports:
 - port: 9000
   protocol: TCP
   targetPort: 80
   nodePort: 31090
 selector:
   app: nginx
 type: NodePort

名词:

kind: Service表示yaml文件创建的是一个Service

metadata表示这个Service的元信息

metadata.name 是Service的名称 nginx-deployment1

metadata.labels 是Service的标签 即:app=nginx

metadata.namespace 是Service的命名空间,此处选择的是第一步创建的命名空间nginx

sepc是Service的详细配置说明

sepc.type 取值NodePort 表示这个Service的类型是一个节点端口转发类型

sepc.selector 表示这个Service是将带标签的哪些pods做为一个集合对外通过服务

sepc.ports.port 是Service绑定的端口

sepc.ports.name: nginx-service80 表示Service服务的名称
sepc.ports.protocol: TCP 表示Service转发请求到容器的协议是TCP,我们部署的http的nginx服务,因此选择协议为TCP
sepc.ports.targetPort: 80 表示Service转发外部请求到容器的目标端口80,即deployment的pod容器对外开放的容器端口80
sepc.ports.nodePort: 31090 表示Service对外开放的节点端口

应用

kubectl apply -f service-nginx.yaml


#查看
kubectl get services -n dev
kube kubectl describe service nginx-deployment1 -n nginx
kubectl delete services nginx-deployment1 -n nginx

4、测试

地址

192.168.1.220:31090

效果:
dashboard k8s,云原生,kubernetes,容器,云原生

报错解决

错误描述 dial tcp 10.96.0.1:443: connect: no route to host

  • systemctl stop docker
  • systemctl stop kubelet
  • iptables --flush
  • iptables -tnat --flush
  • systemctl start kubelet
  • systemctl start docker

错误 Unable to update cni config: No networks found in /etc/cni/net.d文章来源地址https://www.toymoban.com/news/detail-715555.html

mkdir -p /etc/cni/net.d

cat > /etc/cni/net.d/10-flannel.conflist << EOF
{
  "name": "cbr0",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}
EOF

到了这里,关于K8s(kubernetes)集群搭建及dashboard安装、基础应用部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【K8S专题】五、Kubernetes Dashboard 安装配置

      Kubernetes 可以通过命令行工具 kubectl 完成所需要的操作,同时也提供了方便操作的管理控制界面,用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。   Kubernetes Dashboard是Kubernetes的一个Web UI,可以让用户在浏

    2024年02月15日
    浏览(44)
  • K8s(Kubernetes)学习(二):k8s集群搭建

    minikube 只是一个 K8S 集群模拟器,只有一个节点的集群,只为测试用,master 和 worker 都在一起。 裸机安装 至少需要两台机器(主节点、工作节点个一台),需要自己安装 Kubernetes 组件,配置会稍微麻烦点。 缺点:配置麻烦,缺少生态支持,例如负载均衡器、云存储。 直接用

    2024年02月09日
    浏览(62)
  • Containerd+Kubernetes搭建k8s集群

    视频教程地址:https://space.bilibili.com/3461573834180825/channel/seriesdetail?sid=3316691 之前写了一篇基于docker安装kubernetes的文章,这篇文档我们来使用containerd来安装kubernetes,相较于docker,containerd运行容器的时候效率更高,并且可以兼容docker镜像。基于docker安装kubernetes的文章地址:ht

    2024年02月07日
    浏览(46)
  • Kubernetes(k8s)上搭建nacos集群

    你需要准备一个Kubernetes集群,如图我的集群已经准备完毕: nacos可以将配置文件存储到数据库当中,所以我们要先准备一个拥有nacos数据表结构的数据库,这样的数据库镜像我已经准备好了,当然你也可以自己制作这个镜像: 我之前写过一篇Kubernetes上安装数据库的文章:h

    2024年02月03日
    浏览(70)
  • kubernetes(K8S)学习(一):K8S集群搭建(1 master 2 worker)

    kubernetes官网 :https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-kubeadm-kubelet-and-kubectl GitHub :https://github.com/kubernetes/kubeadm 本文 :使用kubeadm搭建一个3台机器组成的k8s集群,1台master节点,2台worker节点。 由于k8s安装较麻烦,为防止出现其他异常,特此

    2024年04月09日
    浏览(67)
  • 二进制搭建 Kubernetes与k8s集群搭建(一)

    目录 二进制搭建 Kubernetes v1.20     操作系统初始化配置 部署 docker引擎 部署 etcd 集群 准备签发证书环境 在 master01 节点上操作      生成Etcd证书 在 node01 节点上操作 在 node02 节点上操作 部署 Master 组件 在 master01 节点上操作 部署 Worker Node 组件 在所有 node 节点上操作 在 mas

    2024年02月06日
    浏览(69)
  • Linux搭建 Kubernetes(K8S)集群详情教程

    当搭建 Kubernetes 集群时,涉及的详细步骤可能较多,以下是详细的 Kubernetes 单节点集群搭建步骤: 步骤 1: 准备工作 确保满足以下基本要求: 一台运行 Ubuntu 18.04 或更高版本的机器。 2 GB 或更多内存。 2 个 CPU 核心或更多。 安装了 Docker。 步骤 2: 安装 Docker 步骤 3: 安装 kubea

    2024年01月17日
    浏览(61)
  • Kubernetes(K8s)使用 kubeadm 方式搭建多 master 高可用 K8s 集群

    本篇主要针对上篇文章的单 master 节点的 K8s 集群上搭建多 master 节点集群 和 LB 负载均衡服务器。 Kubernetes(K8S)集群搭建基础入门教程 虚拟机 IP 地址: IP 操作系统 主机名称 192.168.2.121 centos7.9 k8s-master01 192.168.2.124 centos7.9 k8s-master02 192.168.2.125 centos7.9 k8s-node01 192.168.2.126 centos

    2023年04月26日
    浏览(52)
  • 【kubernetes】k8s高可用集群搭建(三主三从)

    目录 【kubernetes】k8s高可用集群搭建(三主三从) 一、服务器设置 二、环境配置 1、关闭防火墙 2、关闭selinux 3、关闭swap 4、修改主机名(根据主机角色不同,做相应修改) 5、主机名映射 6、将桥接的IPv4流量传递到iptables的链 7、时间同步 8、master之间进行免密登录设置 三、

    2024年02月09日
    浏览(42)
  • 使用containerd从0搭建k8s(kubernetes)集群

    准备两台服务器节点,如果需要安装虚拟机,可以参考《wmware和centos安装过程》 机器名 IP 角色 CPU 内存 centos01 192.168.109.130 master 4核 2G centos02 192.168.109.131 node 4核 2G 设置主机名,所有节点都执行 关闭防火墙,所有节点都执行 关闭swap内存,所有节点都执行 配置网桥,所有节点

    2024年02月08日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包