首页 > 其他分享 >kubernetes入门

kubernetes入门

时间:2023-05-03 20:47:27浏览次数:32  
标签:入门 kubernetes app wordpress mysql pod k8s name

一.导言

随着容器技术的发展,软件界对容器管理的需求越来越迫切,于是出现了一些kubernetes(即k8s),docker swarm 等容器管理软件。同时k8s等服务编排软件也让微服务变得可行,快速扩容缩容,自动处理网络配置等特性也让k8s如火如荼。

k8s能做什么?

  • 服务发现和负载均衡,使用dns或者ip对外暴露容器服务,并提供负载均衡
  • 存储管理,多种存储选择
  • 拟态扩容缩容,根据需求扩容,缩容,并且k8s会尽力达到desired state
  • 自动装箱,比如配置每个容器能使用的CPU和RAM资源,k8s将容器分配到合适的节点以最大化利用系统资源
  • 自动处理故障,当容器失效时,能快速处理,并且不会对客户端有影响
  • 配置和秘钥管理

二.k8s架构及相关概念

control plane:控制台

kube-apiserver: k8s的核心api服务,一般需要做横向扩展

etcd: 提供一致性和高可用的的键值存储,k8s用来存储集群数据。etcd是一款用go语言编写的分布式kv存储,基于raft算法,能提供更稳定的高负载稳定读写能力。

kube-scheduler: 为未分配节点的pod寻找合适的节点

kube-controller-manager: 包括以下controller

  •   node controller: 监视节点下线
  •   job-controller: 监视Job 运行状况
  •   EndpointSlice controller: 即端点列表控制器,为Service 和 pod 提供连接

cloud-controller-manager: 云服务控制管理

node:节点,对应物理机或者虚拟机

kubelet: 运行在节点中的agent,确保容器运行在pod中

kube-proxy: 运行在节点中的网络代理,为Servcie提供支持

pod: k8s 抽象出来的的管理单元,包括一个或者多个容器,共享存储,网络,端口等资源

volume: 存储单元抽象

container:容器,比如docker

Deployment:部署,描述部署的容器,复制等信息,一个典型的Deployment如下

    apiVersion: apps/v1 (版本)
	kind: Deployment (对象类型)
	metadata: (元数据)
	  name: nginx-deployment (name, UIDs)
	spec: (目标状态)
	  selector:
	    matchLabels:
	      app: nginx
	  replicas: 2 # tells deployment to run 2 pods matching the template
	  template:
	    metadata:
	      labels: (labels and selector)
	        app: nginx
	    spec:
	      containers:
	      - name: nginx
	        image: nginx:1.14.2
	        ports:
	        - containerPort: 80

Service:基于pod创建对外或者对内网络服务

三.构建无状态服务

无状态服务:服务不依赖自身的状态,实例的状态数据可以维护在内存中。

构建步骤如下:

   0.笔者这里使用minikube进行测试,先启动minikube   

minikube start
minikube dashboard # 启动后台管理界面

1.执行部署

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: load-balancer-example
  name: hello-world
spec:
  replicas: 5
  selector:
    matchLabels:
      app.kubernetes.io/name: load-balancer-example
  template:
    metadata:
      labels:
        app.kubernetes.io/name: load-balancer-example
    spec:
      containers:
      - image: gcr.io/google-samples/node-hello:1.0
        name: hello-world
        ports:
        - containerPort: 8080
kubectl apply -f https://k8s.io/examples/service/load-balancer-example.yaml

2.查看部署信息

kubectl get deployments hello-world
kubectl describe deployments hello-world

NAME          READY   UP-TO-DATE   AVAILABLE   AGE
hello-world   5/5     5            5           12m

3.查看副本集

这里我们创建了五个副本

kubectl get replicasets
kubectl describe replicasets

NAME                         DESIRED   CURRENT   READY   AGE
hello-world-644f58f5f4       5         5         5       12m

4.创建Service暴露部署

kubectl expose deployment hello-world --type=LoadBalancer --name=my-service # LoadBalancer表示使用负载均衡的方式

5.查看Service

kubectl get services my-service

NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
my-service   LoadBalancer   10.102.184.247   <pending>     8080:31755/TCP   3s

6.查看Service详细信息

kubectl describe services my-service
Name:                     my-service
Namespace:                default
Labels:                   app.kubernetes.io/name=load-balancer-example
Annotations:              <none>
Selector:                 app.kubernetes.io/name=load-balancer-example
Type:                     LoadBalancer
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.102.184.247
IPs:                      10.102.184.247
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  31755/TCP
Endpoints:                10.244.0.87:8080,10.244.0.88:8080,10.244.0.89:8080 + 2 more... # 端点
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none

7.查看pod对应的端点

kubectl get pods --output=wide
NAME                               READY   STATUS      RESTARTS        AGE     IP            NODE       NOMINATED NODE   READINESS GATES
hello-world-644f58f5f4-2slc4       1/1     Running     0               8m46s   10.244.0.91   minikube   <none>           <none>
hello-world-644f58f5f4-jjf6w       1/1     Running     0               8m46s   10.244.0.88   minikube   <none>           <none>
hello-world-644f58f5f4-mzd5x       1/1     Running     0               8m46s   10.244.0.90   minikube   <none>           <none>
hello-world-644f58f5f4-t6cmj       1/1     Running     0               8m46s   10.244.0.89   minikube   <none>           <none>
hello-world-644f58f5f4-xlvtr       1/1     Running     0               8m46s   10.244.0.87   minikube   <none>           <none>

8.访问服务

使用 curl http://<external-ip>:<port> 进行访问。

<external-ip> 这里指代LoadBalancer Ingress地址,许多厂商开发了各种网关和k8s集成。

<port> 指代Service暴露的端口。

如果是minikube,直接启动即可

➜  k8s minikube service my-service
|-----------|------------|-------------|---------------------------|
| NAMESPACE |    NAME    | TARGET PORT |            URL            |
|-----------|------------|-------------|---------------------------|
| default   | my-service |        8080 | http://192.168.49.2:31755 |
|-----------|------------|-------------|---------------------------|

标签:入门,kubernetes,app,wordpress,mysql,pod,k8s,name
From: https://www.cnblogs.com/darcy-yuan/p/17366238.html

相关文章

  • appuploader 入门使用
    回想一下我们发布iOS应用,不仅步骤繁琐,非常耗时。一旦其中一步失误了,又得重新来。作为一名优秀的工程师不应该让这些重复的工作在浪费我们的人生。在软件工程里面,我们一直都推崇把重复、流程化的工作交给程序完成。这次的文章主角就是为了解放我们而来——appuploader,appuploader......
  • Vue2入门之超详细教程八-计算属性
    1、简介计算属性:1.定义:要用的属性不存在,要通过已有的属性计算得来2.原理:底层借助Object.defineproperty方法提供的getter和setter3.Get函数什么时候执行?(1) 初次读取时会执行一次(2) 当依赖的数据发生改变时会被再次......
  • volatility 3 内存取证入门——如何从内存中寻找敏感数据
    volatility3内存取证入门——如何从内存中寻找敏感数据   上面说的思路,我自己在本机验证下,首先,我在虚拟机里使用IE登录我的qq邮箱,如下: 我自己登录IE的进程是2052,虚拟机dumpvmem文件以后,vol3下:python.\vol.py-f"D:\VirtualMachines\Windows10x641809\Win......
  • [动态规划-背包问题入门] 原理,运用,实战
    背包问题--动态规划经典类型动态规划是将问题细分为有限个小问题并通过递推或递归来求得最终值。具象化来说,就是对某一问题的答案,我们转化为dp[n],而对于0<=i<n,dp[i][j]的值会根据前后上下的相关值来变化(i.e.dp[i-1][j]或dp[i][j-1])。注意这时算法强调的不是【容量】,而是......
  • appuploader 入门使用
    回想一下我们发布iOS应用,不仅步骤繁琐,非常耗时。一旦其中一步失误了,又得重新来。作为一名优秀的工程师不应该让这些重复的工作在浪费我们的人生。在软件工程里面,我们一直都推崇把重复、流程化的工作交给程序完成。这次的文章主角就是为了解放我们而来——appuploader,appuploade......
  • appuploader 入门使用
     回想一下我们发布iOS应用,不仅步骤繁琐,非常耗时。一旦其中一步失误了,又得重新来。作为一名优秀的工程师不应该让这些重复的工作在浪费我们的人生。在软件工程里面,我们一直都推崇把重复、流程化的工作交给程序完成。这次的文章主角就是为了解放我们而来——appuploader,appupl......
  • 01 入门
    一、OpenGL1.核心模式与立即渲染模式早期的OpenGL使用立即渲染模式(Immediatemode,也就是固定渲染管线),OpenGL的大多数功能都被库隐藏起来。从OpenGL3.2开始,规范文档开始废弃立即渲染模式,并鼓励开发者在OpenGL的核心模式(Core-profile)下进行开发。2.扩展Extension当一个显......
  • three.js 入门学习(一)
    webGl和three.jshttp://webgl3d.cn/pages/aac9ab/图形学算法Web3DWebGPU下载yarnaddthree@types/three使用import*asTHREEfrom'three';onstscene=newTHREE.Scene();仅导入你所需要的部分import{Scene}from'three';一个初始化的demo场景、相机......
  • 【2023 · CANN训练营第一季】昇腾AI入门Pytorch
    昇腾AI全栈架构华为AI全栈全场景解决方案为4层,分别为芯片层、芯片使能层、AI框架层和应用使能层。芯片基于统一、可扩展架构的系列化AIIP和芯片,为上层加速提供硬件基础。芯片产品:昇腾310和昇腾910的独立芯片,Nano-Tiny-Lite的非独立芯片。Ascend层,一切集成电路的核心,主要作用......
  • XXL-JOB 入门学习
    参考教程主要参考了xxl-job快速入门指南,写的很详细,可以一步步按教程的走。项目环境搭建下载项目先到xxl-jobGitHub地址下载RELEASE的ZIP包。解压后,到MySQL执行doc目录下的db文件。视图页面打开xxl-job-admin模块。然后修改application.properties配置的......