k8s 容器编排(上)

1. k8s 基本认识
2. k8s 的架构
3. 安装 k8s
4. k8s 常用资源
5. k8s 常用的一些命令


一、k8s 基本认识

1.什么是k8s

k8s是一个docker集群的管理工具
k8s是容器的编排工具

2.k8s的核心功能

自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。
.
弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量
.
服务的自动发现和负载均衡: 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。
.
滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。
.
私密配置文件管理: web容器里面,数据库的账户密码(测试库密码)

3.k8s的安装方式
1.  yum安装 1.5  最容易安装成功,最适合学习的
2.  源码编译安装---难度最大  可以安装最新版
3.  二进制安装---步骤繁琐    可以安装最新版(企业)  shell,ansible,saltstack
4.  kubeadm     安装最容易, 网络    可以安装最新版(企业)
5.  minikube    适合开发人员体验k8s,  网络
4.k8s的应用场景

最适合用于跑“微服务(有n套架构)”
1.支持更多的并发
2.网站高可用强
3.代码更新快

二、k8s 的架构

三、安装k8s

首先需要准备主机(master节点+node节点)

对每个节点做hosts解析
10.0.0.11 k8s-master
10.0.0.12 k8s-node-1
10.0.0.13 k8s-node-2

1.master节点的操作

(1).安装配置 etcd 数据库

#安装
[root@k8s-master ~]# yum install etcd -y

#配置
[root@k8s-master ~]# vim /etc/etcd/etcd.conf
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379

#启动并加入开机自启

(2).安装配置 kubernetes-master.x86_64

#安装
[root@k8s-master ~]# yum install kubernetes-master.x86_64 -y

#配置
[root@k8s-master ~]# vim /etc/kubernetes/apiserver 
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
​
[root@k8s-master ~]# vim /etc/kubernetes/config
KUBE_MASTER="--master=http://10.0.0.11:8080"

#启动服务并加入开机自启
kube-apiservice、kube-controller-manager、kube-scheduler

#检查服务是否安装正常
[root@k8s-master ~]# kubectl get componentstatus
2.node节点

安装配置 kubernetes-node.x86_64

#安装
[root@k8s-node-1 ~]# yum install kubernetes-node.x86_64 -y
#配置
[root@k8s-node-1 ~]# vim /etc/kubernetes/config 
KUBE_MASTER="--master=http://10.0.0.11:8080"
​
[root@k8s-node-1 ~]# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=10.0.0.12"
KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.0.0.11:5000/pod-infrastructure:latest"

#启动服务并加入开机自启
kubelet、kube-proxy

3.所有节点安装配置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" }'

#所有节点都安装并启动docker,启动flannel

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

4.配置本地镜像私有仓库
#所有节点
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.11:5000"]
}
​
systemctl restart docker
​
#镜像私有仓库节点
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  registry

四、k8s 常用资源

1.pods

①pod是k8s中的最小资源单位
②pod资源:至少由两个容器组成,pod基础容器和业务容器组成(最多1+4)

pod的yml文件主要组成,注意缩进(两个空格)

apiVersion: v1  api版本
kind: pod   资源类型
metadata:   属性
spec:       详细
2.rc(ReplicationController)

作用:
①保证指定数量的pod资源存活
②通过标签选择器来关联pod
.

滚动升级和一键回滚

1.升级
kubectl rolling-update nginx -f nginx-rc1.15.yaml --update-period=10s

2.回滚
kubectl rolling-update nginx2 -f nginx-rc.yaml --update-period=1s

#依赖于yml文件,升级回滚前后,服务访问会中断,需要修改标签
4.负载 service

①service帮助pod暴露端口
②service默认使用iptables来实现负载均衡, k8s 1.8新版本中推荐使用lvs(四层负载均衡 传输层tcp,udp)

#创建一个service
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
5.deployment

①有rc在滚动升级之后,会造成服务访问中断,于是k8s引入了deployment资源
②创建deployment是,会创建rs,再由rs创建pod,rs相当于rc的升级版
.
优点:
1.升级服务不中断
2.修改配置文件立即升级(kubectl edit)
3.所有操作都可命令行实现
4.不依赖配置文件升级

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

五、k8s 常用的一些命令

1.平时管理资源的命令
# 查看资源
kubectl get    
  参数:(默认是default命名空间)
        pod、deployment、svc、rc
        all   查看所有资源
        -n    指定命名空间
        -o wide    详细显示

# 创建/删除资源
kubectl create/delete -f   
  参数:   
        .   读取所有目录下的所有yml,创建/删除资源
        *.yml    后面可以跟yml文件,指定创建/删除单个

# 在线修改资源配置
kubectl edit   

# 进入pod容器
kubectl exec -it 资源名称 /bin/bash      

# 创建命令空间
kubectl create namespace wordpress

# 命令行创建deployment资源,并且创建service暴露端口
kubectl run che --image=nginx:1.13 --replicas=2
kubectl expose deployment che --port=80 --target-port=80 --type=NodePort

#查看资源日志
kubectl logs
-f            #实时查看日志
--tail=100    #查看最后100行日志

#查看书写k8s yml文件的帮助  资源名称.具体组件
kubectl explain pod.spec
kubectl explain deploy.spec.template.spec.containers.resources

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

2.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.远程操作控制节点master
kubectl -s 10.0.0.11:8080 get nodes
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356