k8s

1. k8s 集群

1.1 k8s 的架构

在这里插入图片描述
除了核心组件,还有一些推荐的Add-ons:

组件名称说明
kube-dns负责为整个集群提供DNS服务
Ingress Controlle为服务提供外网入口
Heapster提供资源监控
Dashboard提供GUI
Federation提供跨可用区的集群
Fluentd-elasticsearch提供集群日志采集、存储与查询

1.11 主机信息

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

1.2 master 节点安装

rm -rf /etc/yum.repos.d/local.repo

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
1.21 安装 etcd
yum install -y etcd

vim /etc/etcd/etcd.conf
	:set nu
	6 ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
	21 ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"		--- 每个etcd 节点名称不能一样

systemctl restart 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.22 安装 kubernetes
yum install -y kubernetes-master.x86_64

vim /etc/kubernetes/apiserver
:set nu
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"		---设置 etcd 集群
23 KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

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

systemctl restart kube-apiserver.service
systemctl enable kube-apiserver.service

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

systemctl restart kube-scheduler.service
systemctl enable kube-scheduler.service

检查服务是否安装正常

kubectl get componentstatus 
NAME                 STATUS    MESSAGE             ERROR
etcd-0               Healthy   {"health":"true"}   
scheduler            Healthy   ok                  
controller-manager   Healthy   ok            

1.3 node 节点安装

rm -rf /etc/yum.repos.d/local.repo

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
1.31安装 kubernetes
yum install -y kubernetes-node.x86_64

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

vim /etc/kubernetes/kubelet
:set nu
5 KUBELET_ADDRESS="--address=0.0.0.0"
8 KUBELET_PORT="--port=10250"
11 KUBELET_HOSTNAME="--hostname-override=10.0.0.12"		--- node 节点 名字必须唯一
14 KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080"

systemctl restart kubelet.service
systemctl enable kubelet.service

systemctl restart kube-proxy.service
systemctl enable kube-proxy.service

注意: node01 与 node02 不一样的配置

vim /etc/kubernetes/kubelet
11 KUBELET_HOSTNAME="--hostname-override=唯一名称"

在 master 节点检查

kubectl get node 
NAME        STATUS    AGE
10.0.0.12   Ready     2m
10.0.0.13   Ready     2m

1.4 所有节点配置 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
所有节点
rz -E docker_alpine.tar.gz

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

systemctl daemon-reload
systemctl restart docker

1.5 配置 master 为镜像仓库

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

systemctl restart docker
master 节点
rz -E registry.tar.gz

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 介绍

2.1 什么是 k8s

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

k8s是容器的编排工具

2.2 k8s 的核心功能

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

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

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

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

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

2.3 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基金会  毕业项目1.10 1.11 1.12

2019年: 1.13, 1.14 ,1.15,1.16  1.17

cncf :cloud  native  compute  foundation 孵化器

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

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

2.4 k8s 的安装方式

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

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

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

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

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

2.5 k8s 的应用场景

k8s最适合跑微服务项目!

2.6 k8s 中的三种 ip

(1) node IP
(2) cluster IP(VIP)
(3) pod IP

3. k8s 的资源

3.1 pod 资源

pod是最小资源单位

任何的一个k8s资源都可以由yml清单文件来定义
k8s yaml 的主要组成
apiVersion:	v1 api版本
kind: pod:	资源类型
metadata:	属性
spec:		详细
pod 仓库修改
node 节点:
rz -E 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/pod-infrastructure:latest
docker push 10.0.0.11:5000/pod-infrastructure:latest

master 节点:	
vim /etc/kubernetes/kubelet

在这里插入图片描述

systemctl restart kubelet.service
k8s_pod.yam
mkdir -p k8s_yaml/pod
cd k8s_yaml/pod

vim k8s_pod.yml
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

kubectl create -f k8s_pod.yml
kubectl get pod
kubectl describe pod nginx

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

3.2 ReplicationController资源

rc:保证指定数量的pod始终存活,rc通过标签选择器来关联pod
资源的常见操作
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 资源
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

kubectl create -f k8s_rc.yaml 
kubectl get rc
kubectl get replicationcontroller 
kubectl get pod
rc 的滚动升级
node 节点:

rz -E docker_nginx1.15.tar.gz
docker load -i docker_nginx1.15.tar.gz
docker tag docker.io/nginx:latest  10.0.0.11:5000/nginx:1.15
docker push 10.0.0.11:5000/nginx:1.15

master 节点:
cp k8s_rc.yaml k8s_rc2.yaml
vim k8s_rc2.yaml

在这里插入图片描述

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

注意!!!

可能需要手动修改 service 的标签选择器
kubectl edit svc nginx

3.3 service 资源

service 提供负载均衡和服务的自动发现
service 的负载均衡功能,由 iptables 来实现的

master 节点:
cd k8s_yaml/
mkdir svc
cd svc/

vim k8s_svc.yaml
apiVersion: v1
kind: Service   #简称svc
metadata:
  name: myweb
spec:
  type: NodePort  #默认ClusterIP
  ports:
    - port: 80          #clusterIP
      nodePort: 30000   #node port
      targetPort: 80    #pod port
  selector:
    app: myweb2

kubectl create -f k8s_svc.yaml

kubectl scale rc nginx --replicas=2 #调整rc的副本书

kubectl exec -it pod_name /bin/bash #进入pod容器

修改 nodePort 范围

vim  /etc/kubernetes/apiserver
KUBE_API_ARGS="--service-node-port-range=3000-50000"
systemctl restart kube-apiserver.service

命令行创建 service 资源

kubectl expose rc nginx --type=NodePort --port=80

3.4 deployment 资源

有rc在滚动升级之后,会造成服务访问中断,于是k8s引入了deployment资源

cd k8s_yaml/
mkdir deploy
cd deploy/

vim k8s_deploy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  strategy:   
rollingUpdate:
  maxSurge: 1  
  maxUnavailable: 1 
type: RollingUpdate
  minReadySeconds: 30
  template:
metadata:
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: 10.0.0.11:5000/nginx:1.13
    ports:
    - containerPort: 80
    resources:  
      limits:
        cpu: 100m
      requests:
        cpu: 100m

kubectl create -f k8s_deploy.yaml
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort
滚动升级
kubectl edit deployment nginx

在这里插入图片描述

deployment 相对于 rc 的优势
(1) 滚动升级服务不会中断访问
(2) 滚动升级不依赖配置文件
(3) deployment 修改配置文件,立即生效
(4) deployment 资源的创建、升级、回滚等操作,都可以命令执行
命令操作
命令行创建deployment
kubectl run   nginx  --image=10.0.0.11:5000/nginx:1.13 --replicas=3 --record

命令行升级版本
kubectl set image deployment nginx nginx=10.0.0.11:5000/nginx:1.15

查看deployment所有历史版本
kubectl rollout history deployment nginx

deployment回滚到上一个版本
kubectl rollout undo deployment nginx

deployment回滚到指定版本
kubectl rollout undo deployment nginx --to-revision=2

3.5 tomcat + mysql 练习

node 节点:

rz -E tomcat-app-v2.tar.gz
rz -E docker-mysql-5.7.tar.gz

docker load -i tomcat-app-v2.tar.gz
docker load -i docker-mysql-5.7.tar.gz

docker tag docker.io/kubeguide/tomcat-app:v2 10.0.0.11:5000/tomcat-app:v2
docker tag docker.io/mysql:5.7  10.0.0.11:5000/mysql:5.7

docker push 10.0.0.11:5000/tomcat-app:v2
docker push 10.0.0.11:5000/mysql:5.7

master 节点:

cd k8s_yaml/
rz -E tomcat_demo.zip
unzip tomcat_demo.zip
cd tomcat_demo/
rm -rf *pv*

kubectl create -f mysql-rc.yml
kubectl create -f mysql-svc.yml

kubectl get svc

在这里插入图片描述

vim tomcat-rc.yml

在这里插入图片描述

kubectl create -f tomcat-rc.yml
kubectl create -f tomcat-svc.yml

在这里插入图片描述

在这里插入图片描述

3.6 wordpress + mysql 练习

node 节点:

rz -E wordpress-latest.tar.gz
docker load  -i wordpress-latest.tar.gz
docker tag docker.io/wordpress:latest  10.0.0.11:5000/wordpress:latest
docker push 10.0.0.11:5000/wordpress:latest

master 节点:

cd k8s_yaml/
cp -a tomcat_demo/ wordpress
cd wordpress/
rename tomcat wordpress *

vim mysql-rc.yml

在这里插入图片描述

kubectl create -f mysql-rc.yml

vim mysql-svc.yml

在这里插入图片描述

kubectl create -f mysql-svc.yml

vim wordpress-rc.yml

在这里插入图片描述

kubectl create -f wordpress-rc.yml

vim wordpress-svc.yml

在这里插入图片描述

kubectl create -f wordpress-svc.yml

在这里插入图片描述

4. k8s 的附加组件

4.1 dns服务

作用
将svc的名称解析成对应VIP地址
dns 的安装
下载dns_docker镜像包(node2节点10.0.0.13)
wget http://192.168.37.200/191127/docker_k8s_dns.tar.gz

导入dns_docker镜像包(node2节点10.0.0.13)

创建dns服务
vim  skydns-rc.yaml

在这里插入图片描述

kubectl  create  -f   skydns-rc.yaml
kubectl create -f skydns-svc.yaml

检查
kubectl get all --namespace=kube-system

修改所有node节点kubelet的配置文件
vim  /etc/kubernetes/kubelet
KUBELET_ARGS="--cluster_dns=10.254.230.254 --cluster_domain=cluster.local"

systemctl   restart kubelet
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值