学习k8s(四)
1、K8S核心组件
1、Master节点:
etcd: 分布式键值对数据库,保存集群状态
api-server: 接受并响应用户的请求
controller: 控制器管理,控制容器的副本数,故障检测
scheduler: 资源调度器,选择启动容器的node节点
2、Node节点:
kubelet: 调用docker,管理容器生命周期
kube-proxy: 提供网络访问,负载均衡
2、k8s的安装部署
1、安装docker(所有节点)
# yum install docker-1.12.rpm
# docker pull gcr.azk8s.cn/google_containers/pause-amd64:3.0 #国内镜像服务器
# systemctl start docker 2、安装etcd(key=value数据库)
1) 安装配置
# yum install -y etcd
# 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) 启动服务
# systemctl start etcd.service
3) 端口检测及测试服务状态
# etcdctl set name test #设置name=test
# etcdctl get name #查看
# netstat -lntp | grep etcd
2379 #客户端连接端口
2380 #etcd集群连接端口 3、安装k8s-master
1) 安装配置
# yum install kubernetes-master -y
# vim /etc/kubernetes/apiserver #主配置文件
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
# vim /etc/kubernetes/config #公共配置文件
KUBE_MASTER="--master=http://10.0.0.11:8080"
2) 启动服务
# systemctl start kube-apiserver.service
# systemctl start kube-controller-manager.service
# systemctl start kube-scheduler.service
3) 测试
# kubectl get cs #检测服务是否正常 4、安装k8s-node
1) 安装配置
# yum install kubernetes-node -y
# vim /etc/kubernetes/config #公共配置文件
KUBE_MASTER="--master=http://10.0.0.11:8080"
# vim /etc/kubernetes/kubelet #主配置文件
KUBELET_ADDRESS="--address=10.0.0.12"
KUBELET_HOSTNAME="--hostname-override=10.0.0.12"
KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080"
2) 启动服务
# systemctl start kubelet.service
# systemctl start kube-proxy.service
3) 检查服务(master节点执行)
# kubectl get nodes 5、安装flannel(跨主机通信)
1) 安装配置(所有节点)
# yum install flannel -y
# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://10.0.1.11:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
2) 配置网络(master节点)
# etcdctl mk /atomic.io/network/config '{ "Network": "172.16.0.0/16" }'
# etcdctl get /atomic.io/network/config
3) 启动服务
# systemctl start flanneld.service
4) 重启所有服务(所有节点)
systemctl restart kube-apiserver.service
systemctl restart kube-controller-manager.service
systemctl restart kube-scheduler.service
systemctl restart kubelet.service
systemctl restart kube-proxy.service
5) 检查服务
ifconfig flannel0 6、配置私有镜像仓库
1) 配置镜像加速和私有仓库地址(master节点)
# vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --registry-mirror=https://registry.docker-cn.com --insecure-registry=10.0.0.11:5000'
# systemctl restart docker
2) 启动私有仓库(master节点)
# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
3) 推送镜像测试(node节点)
# vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry=10.0.0.11:5000'
# docker tag nginx 10.0.0.11:5000/oldguo/nginx:v1
# docker push 10.0.0.11:5000/oldguo/nginx:v1
# docker images
# docker pull 10.0.0.11:5000/oldguo/nginx:v1
3、pod资源管理
1、yaml的主要组成
apiVersion: v1 api版本
kind: pod 资源类型
metadata: 属性
spec: 详细
2、pod文件
# cat k8s_pod.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: web
spec:
containers:
- name: nginx
image: 10.0.0.11:5000/oldguonginx:v1
ports:
- containerPort: 80
3、pod基本操作
创建
# kubectl create –f ks8_pod.yaml
查询
# kubectl get pod
# kubectl get pod -o wide #查看资源列表
# kubectl describe pod #详细查询
# kubectl get pods -o wide --namespace=oldguo #查看不同命名空间的pod
删除
# kubectl delete pod nginx
# kubectl delete -f ks8_pod.yaml
更新
# Kubectl replace ks8_pod.yaml
# kubectl replace --force -f k8s_pod.yml #强制更新
其他
# kubectl explain pod.spec #yml编写帮助
# kubectl edit pod nginx #在线修改pod配置
4、RC资源管理
1、介绍
ReplicationController: 副本控制器,rc通过标签(metadata)选择器(selector)来管理pod
rc: 保证指定数量的pod始终存活,弹性伸缩,滚动升级 2、创建rc文件
# vim nginx-1.13-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx #rc名
spec:
replicas: 3 #副本数
selector:
app: nginx #管理pod名
template:
metadata:
labels:
app: nginx #pod名
spec:
containers:
- name: nginx
image: 10.0.0.11:5000/oldguo/nginx:1.13
ports: 3、rc的基本操作
1) 创建
# kubectl create -f nginx-1.13-rc.yaml
2) 查看
# kubectl get rc
3) 删除pod,rc会自动创建
# kubectl delete rc nginx
4) 更新
# kuberctl edit rc nginx #在线修改(不常用)
# kubectl scale rc nginx --replicas=2 #修改副本数(推荐)
# kubectl replace -f nginx-1.13-rc.yaml #更新(先删再创建,会停服,不推荐)
5) 滚动的升级和回滚
# kubectl rolling-update nginx -f nginx-1.15-rc.yaml --update-period=20s #升级
# kubectl rolling-update nginx -f nginx-1.13-rc.yaml --update-period=10s #回滚
# kubectl rolling-update nginx -f nginx-1.15-rc.yaml --update-period=10s --rollback #升级中回退
5、deployment资源管理
1、介绍
拥有rc的功能,支持事件,状态查看,版本记录等
2、创建deployment文件
# vim nginx-dep.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: 10.0.0.11:5000/oldguo/nginx:1.13
ports:
- containerPort: 80 3、deployment的基本操作
1) 创建
# kubectl create -f nginx-dep.yaml
# kubectl create -f nginx-dep.yaml --record #记录执行的步骤
2) 查看
# kubectl get deploy
3) 删除
# kubectl delete deploy nginx
4) 更新
# kubectl scale deployment nginx --replicas=2
5) 滚动的升级和回滚
# kubectl set image deployment/nginx nginx=10.0.0.11:5000/oldguo/nginx:1.15
# kubectl rollout status deployment nginx #查看状态
# kubectl rollout history deployment nginx #查看历史状态
# kubectl rollout history deployment nginx --revision=2 #查看历史版本
# kubectl rollout undo deployment/nginx #回滚到上次版本
# kubectl rollout undo deployment nginx --to-revision=1 #回滚到指定版本
5、service资源管理
1、介绍
service提供了一个固定虚拟VIP,通过IP访问pod,并且提供负载均衡
Node IP -----> Cluster IP -----> Pod IP
2、创建svc配置文件
# vim nginx-svc.yml
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: NodePort
ports:
- port: 80
nodePort: 30001
selector:
app: nginx
3、svc的基本操作
1) 创建
# kubectl create -f nginx-svc.yaml
2) 查看
# kubectl get svc
3) 删除
# kubectl delete svc nginx
4) 更新
# kubectl scale deployment nginx --replicas=2
6、持久化存储(PV和PVC)
1、创建pv文件
# vim pv-test01.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: test01-pv #pv的名
labels:
pv: test01 #标签名
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: "/data"
server: 10.0.0.11
readOnly: false
# vim pv-test02.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-test02
labels:
pv: test02
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: "/mysql"
server: 10.0.0.11
readOnly: false 2、创建pvc文件
# vim pvc_nfs.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc_nfs #pvc的名
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
selector:
matchLabels:
pv: test01 #绑定指定的pv(指定标签名)
# vim pvc_mysql.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc_mysql
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
selector:
matchLabels:
pv: test02 3、创建
# kubectl create -f pv-test01.yaml
# kubectl create -f pv-test02.yaml
# kubectl create -f pvc_nfs.yaml
# kubectl create -f pvc_mysql.yaml
# kubectl get pv
# kubectl get pvc
7、wordpress项目
1、安装配置NFS
1) master节点
# yum install -y nfs-utils-*
# mkdir /data
# mkdir /code
# vim /etc/exports
/data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)
/code 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)
# systemctl restart rpcbind
# systemctl restart nfs
# showmount -e
2) node节点
# yum install -y nfs-utils-*
# systemctl restart rpcbind
# systemctl restart nfs 2、定义pv
1) mysql的pv
# vim pv_mysql.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-data
labels:
type: pv-mysql
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: "/data"
server: 10.0.0.11
readOnly: false
2) wordpress的pv
# vim pv_wp.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-code
labels:
type: pv-wp
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: "/code"
server: 10.0.0.11
readOnly: false 3、定义pvc
1) mysql的pvc
# vim pvc_mysql.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-mysql
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
selector:
matchLabels:
type: pv-mysql
2) wordpress的pvc
# vim pvc_wp.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-wp
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
selector:
matchLabels:
type: pv-wp 4、创建 pv 和 pvc
# kubectl create -f pv_mysql.yml
# kubectl create -f pv_wp.yml
# kubectl create -f pvc_mysql.yml
# kubectl create -f pvc_wp.yml
# kubectl get pv
# kubectl get pvc 5、创建mysql的rc
# vim mysql-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
spec:
replicas: 1
selector:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: 10.0.0.11:5000/mysql:5.7
ports:
- containerPort: 3306
volumeMounts:
- name: nfs-vol
mountPath: /var/lib/mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
- name: MYSQL_DATABASE
value: "wordpress"
- name: MYSQL_USER
value: "wordpress"
- name: MYSQL_PASSWORD
value: "wordpress"
volumes:
- name: nfs-vol
persistentVolumeClaim:
claimName: pvc-mysql
# kubectl create -f mysql-rc.yaml 6、创建mysql的svc
# vim mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
# kubectl create -f mysql-svc.yaml 7、获取 MySQL 集群 IP
# kubectl get svc
mysql 10.254.69.58 <none> 3306/TCP 28s 8、创建wordpress的rc
# vim wp-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 2
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: 10.0.0.11:5000/wordpress:latest
ports:
- containerPort: 80
volumeMounts:
- name: nfs-vol
mountPath: /var/www/html
env:
- name: WORDPRESS_DB_HOST
value: '10.254.69.58'
- name: WORDPRESS_DB_USER
value: 'wordpress'
- name: WORDPRESS_DB_PASSWORD
value: 'wordpress'
volumes:
- name: nfs-vol
persistentVolumeClaim:
claimName: pvc-wp
# kubectl create -f wp-rc.yaml 9、创建wordpress的svc
# vim wp-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 80
nodePort: 30008
selector:
app: myweb
# kubectl create -f wp-svc.yaml 10、测试
浏览器访问
http://10.0.0.11:30008/
学习k8s(四)的更多相关文章
- Alibaba Nacos 学习(四):Nacos Docker
Alibaba Nacos 学习(一):Nacos介绍与安装 Alibaba Nacos 学习(二):Spring Cloud Nacos Config Alibaba Nacos 学习(三):Spr ...
- 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式
本系列文章导航 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 一.摘要 本篇文章讲解如何使用jQuery获取和操作元素的属性和CSS样式. 其中DOM属性和元素属性的区分值得 ...
- 前端学习 第四弹: HTML(一)
前端学习 第四弹: HTML(一) 元素分类:块元素 内联元素 块级元素在浏览器显示时,通常会以新行来开始(和结束). 例子:<h1>, <p>, <ul>, &l ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- Android Animation学习(四) ApiDemos解析:多属性动画
Android Animation学习(四) ApiDemos解析:多属性动画 如果想同时改变多个属性,根据前面所学的,比较显而易见的一种思路是构造多个对象Animator , ( Animator可 ...
- 五、Android学习第四天补充——Android的常用控件(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的A ...
- 四、Android学习第四天——JAVA基础回顾(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的 ...
- MVC学习(四)几种分页的实现(3)
在这篇MVC学习(四)几种分页的实现(2)博文中,根据URL中传入的两个参数(页码数,首页.上一页.下一页.末页的标记符)来获得对应的分页数据, 只是传入的参数太多,调用起来不太方便(标记符不能够写错 ...
- MyBatis学习 之 四、MyBatis配置文件
目录(?)[-] 四MyBatis主配置文件 properties属性 settings设置 typeAliases类型别名 typeHandlers类型句柄 ObjectFactory对象工厂 pl ...
- 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
[转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...
随机推荐
- BI工具的选择标准有哪些?
作为企业的IT部门如果没有良好的BI工具支持,IT部门将会十分容易陷入困境.那么面对多元化的BI工具市场,IT部门如何选择BI工具呢?BI工具选择的标准又是什么?Smartbi将为大家做一个简单的解答 ...
- Smartbi集成性怎么样,是否方便与已有的Web应用集成?
Smartbi产品具有强大的集成能力,它采用纯JAVA开发,支持J2EE系统的嵌入式部署,它对外提 供所有功能的API访问接口,可以实现灵活的控制,能够方便无缝与已有的Web应用进行集成. 支持丰富 ...
- Linux中查看进程与日志
转至:https://www.cnblogs.com/dengxiaoning/p/13336778.html Linux尽管使用频繁,仍然每次都还是需要到处去找相关的命令,如进程,日志之类的,既然这 ...
- Qt:Qt资源系统
学习自 Qt 资源系统(Qt Resource System) - 知乎 1.什么是Qt 资源系统 Qt资源系统是一种将图片.数据存储于二进制文件中的一套系统.这些图片.数据会被我们的程序使用,它们称 ...
- JZ-008-跳台阶
跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果) 题目链接: 跳台阶 代码 public class Jz08 { ...
- petite-vue源码剖析-优化手段template详解
什么是<template>元素? <template>是2013年定稿用于提供一种更统一.功能更强大的模板本存放方式.具体表现为 通过<template>元素属性c ...
- Azure DevOps (四) 创建第一条流水线
前几篇文章,我们记录了一下azure代码仓库的使用,这篇开始,我们来搞一下azure的流水线. 流水线这个东西我觉得是devops中对于开发人员的灵魂组件,只要我们配置好了一次,剩下的所有部署都是自动 ...
- LGP4451题解
题意明确,不再阐述( 首先,众所周知的是 斐波那契数列 的生成函数是 \(F(x)=\frac x {1-x-x^2}\) 那么答案就是 \(\sum_{i=0} F^i(x) = \frac 1 { ...
- 阿里云服务器搭建vulhub靶场
阿里云服务器搭建vulhub靶场 环境 服务器:阿里云服务器 系统:centos7 应用:vulhub 步骤 vulhub需要依赖docker搭建,首先安装docker. 使用以下方法之一: # cu ...
- Docker——dockerfile
dockerFile介绍 dockerFile是用来构建docker镜像的文件!命令参数脚本! 步骤: 编写dockerFile文件 docker build构建成为一个镜像 docker run运行 ...