day83 k8s企业级容器管理平台

http://kubesphere.qingcloud.com/

目录:

- 1:k8s集群的安装

1.1 k8s的架构
1.2:修改IP地址、主机和host解析
1.3:master节点安装etcd
1.4:master节点安装kubernetes
1.5:node节点安装kubernetes
1.6:所有节点配置flannel网络
1.7:配置master为镜像仓库

- 2:什么是k8s,k8s有什么功能?

2.1 k8s的核心功能
2.2 k8s的历史
2.3 k8s的安装方式
2.4 k8s的应用场景

- 3:k8s常用的资源

3.1 创建pod资源
3.2 ReplicationController资源

1:k8s集群的安装

1.1 k8s的架构

image

除了核心组件,还有一些推荐的Add-ons:

image

1.2:修改IP地址、主机和host解析

10.0.0.11  k8s-master
10.0.0.12  k8s-node-1
10.0.0.13  k8s-node-2

所有节点需要做hosts解析

1.3:master节点安装etcd

yum install etcd -y

vim /etc/etcd/etcd.conf
6行:ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
21行:ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"

systemctl start etcd.service
systemctl enable etcd.service
etcdctl set testdir/testkey0 0
etcdctl get testdir/testkey0
etcdctl -C http://10.0.0.11:2379 cluster-health

etcd原生支持做集群,

作业1:安装部署etcd集群,要求三个节点

1.4:master节点安装kubernetes

yum install kubernetes-master.x86_64 -y

vim /etc/kubernetes/apiserver 
8行:  KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
11行:KUBE_API_PORT="--port=8080"
14行: KUBELET_PORT="--kubelet-port=10250"
17行:KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379"
23行:KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

vim /etc/kubernetes/config
22行:KUBE_MASTER="--master=http://10.0.0.11:8080"

systemctl enable kube-apiserver.service
systemctl restart kube-apiserver.service
systemctl enable kube-controller-manager.service
systemctl restart kube-controller-manager.service
systemctl enable kube-scheduler.service
systemctl restart kube-scheduler.service

检查服务是否安装正常

[root@k8s-master ~]# kubectl get componentstatus 
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"} 

1.5:node节点安装kubernetes

yum install kubernetes-node.x86_64 -y
​
vim /etc/kubernetes/config 
22行:KUBE_MASTER="--master=http://10.0.0.11:8080"

vim /etc/kubernetes/kubelet
5行:KUBELET_ADDRESS="--address=0.0.0.0"
8行:KUBELET_PORT="--port=10250"
11行:KUBELET_HOSTNAME="--hostname-override=10.0.0.12"
14行:KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080"
​
systemctl enable kubelet.service
systemctl restart kubelet.service
systemctl enable kube-proxy.service
systemctl restart kube-proxy.service

在master节点检查

[root@k8s-master ~]# kubectl get nodes
NAME        STATUS    AGE
10.0.0.12   Ready     6m
10.0.0.13   Ready     3s

6:所有节点配置flannel网络

yum install flannel -y

sed -i 's#http://127.0.0.1:2379#http://10.0.0.11:2379#g' /etc/sysconfig/flanneld

master节点:

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

yum install docker -y
systemctl enable flanneld.service 
systemctl restart flanneld.service 
systemctl  restart  docker
systemctl  enable  docker
systemctl restart kube-apiserver.service
systemctl restart kube-controller-manager.service
systemctl restart kube-scheduler.service

node节点

systemctl enable flanneld.service 
systemctl restart flanneld.service 
systemctl  restart  docker
systemctl restart kubelet.service
systemctl restart kube-proxy.service

vim /usr/lib/systemd/system/docker.service 在[Service]区域下增加一行
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT

systemctl daemon-reload 
systemctl restart docker

7:配置master为镜像仓库

#所有节点
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.11:5000"]
}

systemctl restart docker

#master节点,安装仓库
docker load -i registry.tar.gz 
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  registry

2:什么是k8s,k8s有什么功能?

k8s是一个docker集群的管理工具

k8s是容器的编排工具

2.1 k8s的核心功能

自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。

弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量

服务的自动发现和负载均衡: 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。

滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。

私密配置文件管理. web容器里面,数据库的账户密码

2.2 k8s的历史

2014年 docker容器编排工具,立项

2015年7月 发布kubernetes 1.0, 加入cncf基金会 孵化

2016年,kubernetes干掉两个对手,docker swarm,mesos marathon 1.2版

2017年 1.5 -1.9

2018年 k8s 从cncf基金会 毕业项目

2019年: 1.13, 1.14 ,1.15,1.16 1.17

cncf :cloud native compute foundation

kubernetes (k8s): 希腊语 舵手,领航者 容器编排领域,

谷歌15年容器使用经验,borg容器管理平台,使用golang重构borg,kubernetes

2.3 k8s的安装方式

yum安装 1.5 最容易安装成功,最适合学习的

源码编译安装---难度最大 可以安装最新版

二进制安装---步骤繁琐 可以安装最新版 shell,ansible,saltstack

kubeadm 安装最容易, 网络 可以安装最新版

minikube 适合开发人员体验k8s, 网络

2.4 k8s的应用场景

k8s最适合跑微服务项目!
mvc 开发架构:主域名不变
soa 开发架构
微服务架构:N多个小服务,每个服务都有自己的数据库,自己的域名。提供更高的并发,更高的可用性。

3:k8s常用的资源

3.1 创建pod资源

pod是最小资源单位.

任何的一个k8s资源都可以由yml清单文件来定义

k8s yaml的主要组成

apiVersion: v1  api版本
kind: pod   资源类型
metadata:   属性
spec:       详细

master节点

[root@k8s-master pod]# cat k8s_pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: web
spec:
  containers:
    - name: nginx
      image: 10.0.0.11:5000/nginx:1.13
      ports:
        - containerPort: 80

[root@k8s-master pod]# kubectl create -f k8s_pod.yaml
[root@k8s-master pod]# kubectl get pod

上传镜像推送至仓库
wget http://192.168.21.201/0907/docker_nginx1.13.tar.gz
docker load -i docker_nginx1.13.tar.gz 
docker tag docker.io/nginx:1.13 10.0.0.11:5000/nginx:1.13
docker push 10.0.0.11:5000/nginx:1.13
kubectl describe pod nginx

上传镜像推送至仓库
wget http://192.168.21.201/0907/pod-infrastructure-latest.tar.gz
docker load -i pod-infrastructure-latest.tar.gz 
docker tag docker.io/tianyebj/pod-infrastructure:latest 10.0.0.11:5000/rhel7/pod-infrastructure:latest
docker push 10.0.0.11:5000/rhel7/pod-infrastructure:latest
kubectl get pod

node节点:

vim /etc/kubernetes/kubelet
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.0.0.11:5000/rhel7/pod-infrastructure:latest"

systemctl restart kubelet.service
docker images

pod资源:至少由两个容器组成,pod基础容器和业务容器组成(最多1+4)

pod配置文件2:

[root@k8s-master pod]# cat k8s_pod3.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: test
  labels:
    app: web
spec:
  containers:
    - name: nginx
      image: 10.0.0.11:5000/nginx:1.13
      ports:
        - containerPort: 80
    - name: busybox
      image: 10.0.0.11:5000/busybox:latest
      command: ["sleep","1000"]

pod是k8s最小的资源单位

3.2 ReplicationController资源

rc:保证指定数量的pod始终存活
rc:通过标签选择器来关联pod

k8s资源的常见操作:

kubectl create -f xxx.yaml
kubectl get pod|rc
kubectl describe pod nginx
kubectl delete pod nginx 或者kubectl delete -f xxx.yaml
kubectl edit pod nginx

创建一个rc

[root@k8s-master rc]# cat k8s_rc.yaml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 5  #副本5
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb
        image: 10.0.0.11:5000/nginx:1.13
        ports:
        - containerPort: 80

[root@k8s-master rc]# kubectl get rc -o wide
NAME      DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                    SELECTOR
nginx     5         5         5         22s       myweb          10.0.0.11:5000/nginx:1.13   app=myweb

rc的滚动升级

新建一个nginx-rc1.15.yaml

[root@k8s-master rc]# cat k8s_rc2.yaml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx2
spec:
  replicas: 5  #副本5
  selector:
    app: myweb2
  template:
    metadata:
      labels:
        app: myweb2
    spec:
      containers:
      - name: myweb
        image: 10.0.0.11:5000/nginx:1.15
        ports:
        - containerPort: 80

升级

kubectl rolling-update nginx2 -f k8s_rc.yaml --update-period=1s

[root@k8s-master rc]# kubectl get rc -o wide
NAME      DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                    SELECTOR
nginx2    5         5         5         2m        myweb          10.0.0.11:5000/nginx:1.15   app=myweb2

[root@k8s-master rc]# kubectl get pod -o wide
NAME           READY     STATUS             RESTARTS   AGE       IP            NODE
nginx          1/1       Running            0          4h        172.18.21.2   10.0.0.13
nginx2-34z1g   1/1       Running            0          1m        172.18.31.4   10.0.0.12
nginx2-3gmbg   1/1       Running            0          2m        172.18.21.6   10.0.0.13
nginx2-q0h1r   1/1       Running            0          2m        172.18.31.5   10.0.0.12
nginx2-qsgp6   1/1       Running            0          1m        172.18.31.6   10.0.0.12
nginx2-sffcp   1/1       Running            0          1m        172.18.21.4   10.0.0.13

[root@k8s-master rc]# curl -I 172.18.21.4
HTTP/1.1 200 OK
Server: nginx/1.15.5
Date: Mon, 09 Dec 2019 12:13:40 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 02 Oct 2018 14:49:27 GMT
Connection: keep-alive
ETag: "5bb38577-264"
Accept-Ranges: bytes

回滚

kubectl rolling-update nginx -f k8s_rc2.yaml --update-period=5s

知识点归纳

1:k8s集群的安装

  • 1.1 k8s集群的架构
    master节点:etcd,api-server,scheduler,controller-manager
    node节点:kubelet,kube-proxy

  • etcd的作用:数据库
    api-server:核心服务
    controller-manager: 控制器管理 rc
    scheduler: 创建新pod,选择合适的节点

  • kubelet: 调用docker来创建容器
    kube-proxy: 对外提供用户访问,对内提供一个负载均衡器

1.6 :所有节点配置flannel网络

  • 跨节点容器间的通信
    a:安装etcd
    b:安装配置启动flannel
    c:重启docker生效

1.7 :配置master为docker镜像私有仓库

  • a:速度快
    b:保护隐私

2:什么是k8s,k8s有什么功能?

  • 2.1 k8s的核心功能
    自愈:
    弹性伸缩:
    服务自动发现和负载均衡
    滚动升级和一键回滚
    密码和配置文件管理

2.2 k8s的历史

  • 2015年 7月份 1.0版

2.3 k8s的安装方式

  • yum 安装
    源码编译
    二进制 生产使用
    kubeadm 生产使用
    minikube

2.4 k8s的应用场景

  • 微服务:
    更高的并发,更高的可用性,更快代码更新
    缺点: 管理复杂度上升
    docker--k8s--弹性伸缩

3:k8s常用的资源

  • 3.1创建pod资源
    k8s最小资源单位
    pod资源至少包含两个容器,基础容器pod+业务容器

3.2 ReplicationController资源

  • 保证指定数量的pod运行
    pod和rc是通过标签来关联
    rc滚动升级和一键回滚
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容