k8s

本文详细介绍Kubernetes的基本概念、核心组件及常见命令,并演示如何搭建Kubernetes集群,包括Master节点、Node节点的配置过程,以及创建Pod和服务的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kubernetes

1.1参考网站

http://www.cnblogs.com/zhenyuyaodidiao/p/6500830.html

1.2k8s概念

容器 集群管理

hpa:自动扩展。

副本:指定有多少个pod。

1.3kubernets组成

master控制节点:启调度管理作用。

master中服务:

etcd                     :k8s没有数据库,数据都存储子etcd中,是go语言开发的分布式存储,所有数据的同步都通过etcd实现,数据的读写都通过curl方式实现。

api-server      :修改etcd数据中内容,

schedule              :调度器,多节点时调度选择,绑定Pod到node节点上

controller-manager:当有多个计算节点时,控制管理中心会定时扫描,所有计算节点中容器,一旦控制中心发现其中一台挂掉,就立马抵用schedule调度器,到其他计算节点中重新生成容器。

node节点:计算节点,容器都在计算节点。

node节点中服务:

kubelet         :容器的管理,比如创建等,容器的所有管理操作都由它操作。

kube-proxy   :网络代理,提供其他机器来访问容器。

docker          :底层服务,生成容器。

1.4k8s中ip类型

1.      物理ip:宿主机ip

2.      cluster ip:集群ip,默认是10.254段,可在

3.      pod:跑的容器,容器的ip,需要自定义

1.5k8s的pod

pod:k8s中最小的单元,一个pod可以跑多个容器,容器没有ip,pod中的容器共用pod的文件系统和ip地址。

pod中容器个数理论上没有限制,最好限制容器数量为2-3个。

1.      编写pod的yml文件

hello-world 为pod的名称

2.      创建pod

kubectl create -f yml文件

执行时报错:

解决方法:

3.      查看pod

kubectl get pods                                                        #状态未启动

4.      查看创建pod的具体流程

kubectl describe pods pod的名称

#kubectl describe pods hello-nginx

5.      解决证书错误

yum install *rhsm* -y

#到node节点中安装包,生成证书

6.      下载pod基础镜像(此步骤可以省略)

找到有用的然后下载

给镜像打上标签,否则需要修改配置文件,还需要重启,

docker tagdocker.io/tianyebj/pod-infrastructure:latestregistry.access.redhat.com/rhel7/pod-infrastructure:latest

##################################

#创建pod的时候会到红帽的官网下载pod的基础镜像,配置文件有定义,可以修改配置文件解决,但须重启

安装成功之后

安装成功之后会有两个容器一个是pod的基础容器,一个是新创建的容器。

新建的容器不会有ip地址,pod有ip地址,新容器使用pod的ip地址来进行网络通信。

1.6RC副本控制器

spec:

containers:

-name 容器名

iamge 镜像名

-containerPort:开放端口

1. 创建rc

 # kubectlcreate -f nginx-rc.yaml

1. 查看rc状况

2.更新rc配置文件(更新pod容器)

4.      删除rc

5.      编辑rc文件

kubectl edit rc nginx

6.      升级

vim web-rc.yaml

 

# rolling-update是一个非常重要的命令,对于已经部署并且正在运行的业务,rolling-update提供了不中断业务的更新方式。rolling-update每次起一个新的pod,等新pod完全起来后删除一个旧的pod,然后再起一个新的pod替换旧的pod,直到替换掉所有的pod。

rolling-update需要确保新的版本有不同的name,Version和label,否则会报错 。

7.      回滚

#只需要把名字改成之前的名字就可以了

1.7Deployment是rc的加强版

1.8service

service:使容器能够被外部访问,用户访问节点的ip加映射的端口的时候,会自动转到service的ip,

然后service再随机分配给pod,

每个service在集群内部,都有一个有效的vip,集群内通过vip访问到服务,先访问vip,然后服务调度到pod的ip。

 

1.      查看集群的ip

2.      创建service

kind:Service  指定service

name:服务名称

把容器的8080映射到node节点的30001端口

selector 标签选择器

app:  myweb通过myweb自动关联到myweb的pod

1.      编辑yaml文件

apiVersion: v1

kind: Service

metadata:

  name: myweb

spec:

  type:NodePort

  ports:

    - port:8080                                    #容器的端口

     nodePort: 30001                               #节点的宿主机端口

  selector:

    app:myweb

2.      创建

到node节点上查看端口,看是否有映射的端口

netstat

访问node节点的ip加端口测试(镜像可以是nginx或者tomcat的以方便测试)

 

1.9dashboard)组件

1.      参考地址

http://www.cnblogs.com/zhenyuyaodidiao/p/6500897.html

limits和requests限制cpu和内存

ports中指定容器对外的端口

1.      编辑文件

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

# Keep the name in sync with image version and

# gce/coreos/kube-manifests/addons/dashboardcounterparts

  name:kubernetes-dashboard-latest

  namespace:kube-system

spec:

  replicas: 1

  template:

    metadata:

      labels:

       k8s-app: kubernetes-dashboard

       version: latest

       kubernetes.io/cluster-service: "true"

    spec:

     containers:

      - name:kubernetes-dashboard

       image:index.tenxcloud.com/google_containers/kubernetes-dashboard-amd64:v1.4.1

       resources:

          #keep request = limit to keep this container in guaranteed class

         limits:

           cpu: 100m

           memory: 50Mi

         requests:

           cpu: 100m

           memory: 50Mi

       ports:

        -containerPort: 9090

        args:

        - --apiserver-host=http://10.0.0.11:8080

       livenessProbe:

         httpGet:

           path: /

           port: 9090

         initialDelaySeconds: 30

         timeoutSeconds: 30

2.      到node节点准备镜像,load -i

3.      创建并查看

4.      创建service

apiVersion: v1

kind: Service

metadata:

  name:kubernetes-dashboard

  namespace:kube-system

  labels:

    k8s-app:kubernetes-dashboard

   kubernetes.io/cluster-service: "true"

spec:

  selector:

    k8s-app:kubernetes-dashboard

  ports:

  - port: 80

   targetPort: 9090

5.      创建服务

8.      访问

http://10.0.0.11:8080/ui/ 

 

1.10k8s常见的命令

1.      常见的命令操作

http://blog.youkuaiyun.com/xingwangc2014/article/details/51204224

2.      创建pod资源

kubectl create -f aa.yaml

3.      查看默认namespace下的pod

kubectl get pods

4.      查看pod调度到哪里

kubectl get pods -o wide

5.      删除pod

kubectl delete pods hello-world

6.      查看pods日志

 

7.      升级

 

8.      删除Deployment

kubectl delete -f dashboard.yaml

9.      查看服务

kubectl get service

10.删除服务

kubectl delete service 服务名称

 

1.11配置步骤

1.11.1master配置

1.      安装包

yum install etcd -y

yum install docker -y

yum install kubernetes -y

yum install flannel -y                          #实现容器之间的通信,控制检点和master节点都需要安装

2.      修改etcd配置文件

vim /etc/etcd/etcd.conf

 9 ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

 20ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"

3.      启动etcd服务

systemctl start etcd

systemctl enable etcd

4.      etcd健康检查

etcdctl -C http://10.0.0.11:2379cluster-health

#结果如下图成功

5.      修改apiserver配置文件

api地址

api端口

vim /etc/kubernetes/apiserver

6.      修改k8s集群通用配置文件

vim /etc/kubernetes/config

7.      启动服务

systemctl start kube-apiserver                             #必须先启动

systemctl enable kube-apiserver

systemctl start kube-scheduler

systemctl enable kube-scheduler

systemctl enable kube-controller-manager

systemctl start kube-controller-manager

8.      检查node节点的配情况(需要node节点都配置好之后才可以)

9.      配置flannel网络

vim /etc/sysconfig/flanneld

10.  配置flannel的网络范围(pod的ip范围,容器的ip范围)

etcdctl mk /atomic.io/network/config '{"Network": "172.16.0.0/16" }'

#Flannel使用Etcd进行配置,来保证多个Flannel实例之间的配置一致性,所以需要在etcd上进行如下配置:(‘/atomic.io/network/config’这个key与上文/etc/sysconfig/flannel中的配置项FLANNEL_ETCD_PREFIX是相对应的,错误的话启动就会出错)

11.  启动flannel和相关服务

systemctl enable flanneld.service

systemctl start flanneld.service

systemctl restart docker

systemctl restart kube-apiserver.service

systemctl restart kube-controller-manager.service

systemctl restart kube-scheduler.service

#重启后会第一块flanneld的网卡

1.11.2node1节点配置

1.      安装包

yum install docker -y

yum install kubernetes -y

yum install flannel -y

1.11.3node节点2配置

1.      安装包同上

2.      修改k8s通用配置文件

vim /etc/kubernetes/config

3.      修改kubelet配置文件

vim /etc/kubernets/kubelet

4.      启动服务

systemctl start kube-proxy

systemctl enable kube-proxy

systemctl start kubelet

systemctl start kubelet

端口:

kube-proxy:10249

kubelet:10,255,10250,4194

5.      修改flannel配置

vim /etc/sysconfig/flanneld

:wq

6.      重启相关服务

systemctl enable flanneld.service

systemctl start flanneld.service

systemctl restart docker

systemctl restart kubelet.service

systemctl restart kube-proxy.service

 

第2章 扩展

2.1pv+uv+ip

pv:pageview,页面浏览次数,刷新次数

uv:访问网站的pc的数量,通过cookie来计算,cookie存储的是用户id,cookie不变,都算一次,同cookie在24小时内访问算一次。

ip:访问网站的ip地址来访问的,24小时内,一个ip即便访问一次,也只能算一次。

2.2zookeeper

类似etcd,用来存储数据,但是需要java环境支持,相对etcd来说,比较臃肿。

 

2.3dns

https://www.cnblogs.com/breezey/p/6553738.html 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值