k8s 小记1

一个service的4个特征:
拥有唯一指定的名字
拥有一个endpoint(虚拟cluster ip +service port)
拥有提供远程服务能力
能被映射到提供服务能力的一组容器上
一个pod =一个pause天使容器+many 业务容器
pause:每一个pod的共享网络栈和volume挂载卷
启示:密切相关的服务应该放在同一个pod
对比传统it的服务扩容与服务升级,k8s的优势
服务升级:修改replicas
服务扩容:修改resource
dokcer 启动时候的配置说明:
cd /etc/sysconfig/docker 
修改options中的内容
--insecure-registry gcr.io :docker去谷歌的仓库拉天使image,pause_adm64
--selinux-enabd=flase:关闭selinux,
               关闭原因:恩~,1,nsa主导开发,2,懒得搞

k8s启动说明:
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kubde-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
说明:
master:kube-apiserver,kubde-controller-manager,kube-scheduler,etcd
slave: kubelet,kube-proxy, docker
question:why comapany all on one?is it passroble not on one?
遗留问题:
etcd 持久化
service name与endpoint的匹配,服务发现机制。
业务pod与天使pod共享volume与网络。
遗留
k8s平滑的升级:
假设有5个pod,我们升级的过程中,我们升级总是保持在5个,
1个pod died,同时一个pod born,
这种的升级方式叫做rolling update.
kubectl scale rc mysql --replicas=3
脚本控制升级备份等于3
replica set:升级的rc机制,支持基于集合的label selector
spec:
  selector:
    matchLables:
      tier: frontend
    matchExpressions:
      - {key: tier,oprator: In, values: [frontend]}\
在未来的k8s版本中,replicas set 与 deployment 会逐渐取代rc的作用

deployment的定义与replica set相似,也支持基于集合的label selector。
deployment可以看成是rc 的升级,可以实时的知道当前pod的部署进度
deployment是基于replica set的。所以查看deployment状态有
kubectl get rs

HPA:pod自动化扩容升级
跟踪rc控制的所有的pod的负载情况,确定是否需要调整pod的副本数
判断标准:cpuutilizationpercentage,程序自定义的度量目标(tps,qps)


apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: v1
    kind: ReplicationController
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50
监控php-apache的rc,最小是1,最大是10,
CPUUtilizationPercentage超过50/100会触发动态调整。
svcname与cluster ip的关联:
最早的版本的k8s是使用环境变量:docker inspect  containerid 可以看到
DNS域名映射
k8s在单机的pod是可以通过k8s服务发现机制互相访问
k8s在多机的的pod是不提供网络设置的,
需要借助一些跨主机的容器网络设置工具
fannel,open vswitch,weave,calico实现跨主机的容器网络互通
配置与服务进行分离
configmap:定义配置的service
服务pod:提取configmap中的配置使用


configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm


pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.how

k8s的pod重启策略

always:当容器失效的时候,由k8s自动重新启动该容器
onfailure:容器种植运行,并且退出码不为0,重启
never:不论容器的运行状态怎么样,都不会重启启动该容器
pod扩容与升级
扩容:
    replicas
    HPA:需要安装heapster组件


创建php-apache实例的RC 
通过kubectl create -f php-rc.yaml文件创建RC. 
文件内容如下:


RC
apiVersion: v1
kind: ReplicationController
metadata:
  name: php-apache
spec:
  replicas: 1
  template:
    metadata:
      name: php-apache
      labels:
        app: php-apache
    spec:
      containers:
      - name: php-apache
        image: gcr.io/google_containers/hpa-example:latest
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 200m
        ports:
        - containerPort: 80



创建php-apache实例的SVC 
通过kubectl create -f php-svc.yaml文件创建SVC.文件内容如下:

apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    k8s-app: php-apache
spec:
  ports:
    # The port that this service should serve on.
    - port: 80
  # Label keys and values that must match in order to receive traffic for this service.
  selector:
    app: php-apache


创建HPA 
通过kubectl create -f hpa-example.yaml文件创建HPA.文件内容如下:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: v1
    kind: ReplicationController
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50




滚动升级:matrix封装了k8s的滚动升级,这里记一下原生态的k8s升级
step1:配置升级的rc文件,name,version,image都得修改为新的version
step2:kubectl rolling-update podname -f rc.yaml
k8s会先去新建pod,然后杀死旧的pod.完成集群更新的工作

可以看一看的文章

https://blog.csdn.net/ximenghappy/article/details/70242322

你可能感兴趣的:(k8s 小记1)