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健康检查
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