分类 - K8S

K8S    2024-01-10 17:34:36    19    0    0

添加一个名为dev的集群,指定集群apiserver的地址,指定集群的ca证书

  1. kubectl config set-cluster dev --server=https://k8s.xxx.com:6443 --certificate-authority=$HOME/.kube/dev/ca.pem

添加一个名为sanger的用户证书

  1. kubectl config set-credentials sanger --client-certificate=$HOME/.kube/dev/sanger.crt --client-key=$HOME/.kube/dev/sanger.pem --embed-certs=true

切换集群环境为dev,用户为sanger

  1. kubectl config set-context dev --cluster=dev --user=sanger

切换集群环境为dev

  1. kubectl config use-context dev

脚本

  1. #!/bin/bash
  2. k8s_url=$1
  3. env=$2
  4. username=$3
  5. if [ $# == 0 ];then
  6. echo -e "\033[40;31mYou must take three parameters like this:\nsh $0 https://k8s.xxx.com:6443 dev sanger \033[0m"
  7. else
  8. kubectl config set-cluster $2 --server=$1 --certificate-authority=$HOME/.kube/$2/ca.pem
  9. kubectl config set-credentials $3 --client-certificate=$HOME/.kube/$2/$3.crt --client-key=$HOME/.kube/$2/$3.pem
K8S    2024-01-10 17:34:36    69    0    0
  1. ###国内k8s镜像地址
  2. registry.cn-beijing.aliyuncs.com/k8s_images/
  3. registry.aliyuncs.com/google_containers/
  4. mirrorgooglecontainers/
  5. docker pull registry.aliyuncs.com/google_containers/coredns:1.2.2
  6. docker pull registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.8.3
  7. docker pull registry.aliyuncs.com/google_containers/heapster-amd64:v1.5.3
  8. docker pull registry.aliyuncs.com/google_containers/heapster-grafana-amd64:v4.4.3
  9. docker pull registry.aliyuncs.com/google_containers/heapster-influxdb-amd64:v1.3.3
  10. docker pull mirrorgooglecontainers/metrics-server-amd64:v0.3.1
  11. docker pull registry.aliyuncs.com/google_containers/addon-resizer:1.8.3
  12. ##elasticsearch和kibana的小版本要一致
  13. docker pull mirrorgooglecontainers/elasticsearch:v6.3.0
  14. docker pull mirrorgooglecontainers/fluentd-elasticsearch:v2.2.0
  15. docker pull docker.elastic.co/kibana/kibana-oss:6.3.2
  16. docker tag registry.aliyuncs.com/google_containers/coredns:1.2.2 k8s.gcr.io/coredns:1.2.2
  17. docker ta
K8S    2024-01-10 17:34:36    31    0    0

k8s是什么?

  Kubenetes是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境中的容器编排。

  K8S是Google公司推出的,它来源于由Google公司内部使用了15年的Borg系统,集结了Borg的精华。

K8s架构的组成是什么?

  和大多数分布式系统一样,K8S集群至少需要一个主节点(Master)和多个计算节点(Node)。

  主节点主要用于暴露API,调度部署和节点的管理;
  
  计算节点运行一个容器运行环境,一般是docker环境(类似docker环境的还有rkt,k8s 1.24及以上版本已经不支持docker了),同时运行一个K8s的代理(kubelet)用于和master通信。
  
  计算节点也会运行一些额外的组件,像记录日志,节点监控,服务发现等等。计算节点是k8s集群中真正工作的节点。

K8S架构总览

  • Master
    • kube-apiserver
    • kube-controller-manager
    • kube-scheduler
    • etcd
    • kubelet
    • addons
  • Node
    • kubelet
    • kube-proxy
    • continard\podman\docker\rkt
    • addons
  • Client
    • kubectl

Master节点

  默认不参加实际工作

K8S    2024-01-10 17:34:36    9    0    0

创建deploy和service

  1. $ kubectl run php-apache --image=pilchard/hpa-example --requests=cpu=200m --expose --port=80

创建autoscaler

  1. $ kubectl autoscale deploy php-apache --cpu-percent=50 --min=1 --max=10

等待3~5分钟查看hpa状态

  1. $ kubectl get hpa php-apache
  2. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  3. php-apache Deployment/php-apache 0% / 50% 1 10 1 3m

增加负载

  1. $ kubectl run --rm -it load-generator --image=busybox /bin/sh
  2. Hit enter for command prompt
  3. $ while true; do wget -q -O- http://php-apache; done;

等待约5分钟查看hpa显示负载增加,且副本数目增加为4

  1. $ kubectl get hpa php-apache
  2. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  3. php-apache Deployment/php-apache 43
K8S    2024-01-10 17:34:36    15    0    0

Centos 7.X上二进制安装k8s

系统环境

均为centos7.x

master node1 node2
192.168.2.237
192.168.2.238 192.168.2.239
2c2g50g 2c4g50g 2c4g50g

warnning

一定要注意各节点的时区、时间必须要统一

master上记得安装ansible

一键安装过程

参考地址-大佬github

先把项目download下来
git clone https://github.com/easzlab/kubeasz.git

然后把项目中的所有内容拷贝到/etc/ansible下

根据需求编辑hosts文件

执行一键安装shell脚本,或一个步骤一个步骤的安装

ansible-playbook 90-setup.sh

验证集群是否安装成功

kubectl get no

K8S    2024-01-10 17:34:36    16    0    0

安装k8s集群

基础环境

CoreOS-2135.5.0
配置均为2C4G20G

master minor 1 minor 2
192.168.2.240 192.168.2.241 192.168.2.242

修改ssh端口

  1. sed -i '$a\Port=10000\nPermitRootLogin yes' /etc/ssh/sshd_config && systemctl mask sshd.sock && systemctl enable sshd.service && systemctl restart sshd.service

在ansible机器上配置密钥登录

  1. # 分发公钥
  2. for i in {240..242};
  3. do
  4. ssh-copy-id -p 10000 -o PubkeyAuthentication=no -i ~/.ssh/id_rsa root@192.168.2.$i
  5. done
  6. # 验证
  7. for i in {240..242}; do ssh -p 10000 192.168.2.$i hostname; done

修改环境中的公共变量

/etc/ansible/env/dev/group_vars/defalut.yml

修改相关环境的inventory文件

/etc/ansible/env/dev/inventory

启动bootstrap.yml文件

K8S    2024-01-10 17:34:36    21    0    0

1. nfs

nfs作为存储的后端,搭建比较容易,但不支持pvc扩容
https://kubernetes.io/zh/docs/concepts/storage/volumes

nfs-client-provisioner 是一个Kubernetes的简易NFS的外部provisioner,本身不提供NFS,需要现有的NFS服务器提供存储

PV以 namespace{pvcName}-pvNameNFSPVarchieved{namespace}-pvcName{pvName} 的命名格式(在NFS服务器上)

1.1 测试服务是否ok

showmount -e 10.3.xxx.xxx

1.2 测试挂载

mkdir -p /mnt/dev
mount -t nfs 10.3.xxx.xxx:/data/share/dev /mnt/dev -o proto=tcp -o nolock

以上都测试ok,就可以开始K8S做PVC的测试了

1.3 基于k8s的使用

统一格式,namespace-pvc 这类名称,如有相关需求可以找sanger开通(原则上一个namespace一个pvc)。

参考 deployment

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. annotations:
  5. labels:
  6. app: xxx
  7. name: xxx
  8. namespace: xxx
  9. spec:
  10. replicas: 1
  11. revisionHistoryLimit: 10
  12. selector:
  13. matchLabels:
  14. app: xxx
  15. strategy:
  16. ro
K8S    2024-01-10 17:34:36    37    0    0

Ingress

指定path返回指定文本内容

  1. kind: Ingress
  2. metadata:
  3. annotations:
  4. ingress.kubernetes.io/server-snippet: |
  5. location = /test {
  6. return 200 "test";
  7. }

重定向到其他地址,但是带的?参数要能传过去

  1. kind: Ingress
  2. metadata:
  3. annotations:
  4. ingress.kubernetes.io/server-snippet: |
  5. rewirte ^/xxx/xxx(\?*)$ http://baidu.com$1 permanent;
  6. }
K8S    2024-01-10 17:34:36    50    0    0

Kubectl命令自动补全

在bash中安装自动完成,应该首先安装bash-completion包

  1. yum install bash-completion -y

永久生效在当前用户

  1. echo "source <(kubectl completion bash)" >> ~/.bashrc
  2. source ~/.bashrc

临时生效在当前终端

  1. ## setup autocomplete in bash
  2. source <(kubectl completion bash)
  3. ## setup autocomplete in zsh
  4. $ source <(kubectl completion zsh)
K8S    2024-01-10 17:34:36    24    0    0

背景

近期dev环境资源比较紧张,需要开发deployment配置做下改变

request和limit

Requests: 就是需求限制,也叫软限制
Limits:最大限制,也叫硬限制
通常来说:Limits >= Requests
并且requests 和 limits 通常要一起配置,若只配置了requests,而不配置limits,则很可能导致Pod会吃掉所有资源。

配置修改

命令行修改

  1. kubectl set resources deployment test --limits=cpu=50m,memory=64Mi -n test

从文件修改

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. labels:
  5. app: test
  6. name: test
  7. namespace: test
  8. spec:
  9. minReadySeconds: 10
  10. progressDeadlineSeconds: 600
  11. replicas: 1 # 如无特殊需求,尽量做1副本
  12. revisionHistoryLimit: 10
  13. selector:
  14. matchLabels:
  15. app: test
  16. version: v1
  17. strategy:
  18. rollingUpdate:
  19. maxSurge: 1
  20. maxUnavailable: 1
  21. type: RollingUpdate
  22. template:
  23. metadata:
  24. creationTimestamp: null
  25. labels:
  26. app: test
  27. version: v1
  28. namespace: test
  29. spec:
  30. containers:
  31. - args:
  32. - nohup ./test -conf /test/config/config.json
1/2