更多官方文档

https://kubernetes.io/zh/docs/tasks/administer-cluster/network-policy-provider/calico-network-policy/
https://www.kubernetes.org.cn/cronjob

使用kubeadm 部署k8s集群

ps: k8s 不能直接管理容器 最小单位为pod 需要借助docker

前期准备
1. 三台虚拟机 分别设置主机名 hostnamectl set-hostname master1 、worker1 、worker2
2. 网络修改 vi /etc/sysconfig/network-scripts/ifcfg-ens33
  BOOTPROTO  none/static  
  IPADDR="192.168.199.128" 当前虚拟机ip
  PREFIX="24"  
  GATWAY="192.168.199.2"  一般为当前网段的.2
  DNS1="119.29.29.29"
  重启网卡  systemctl restart network  
3. 安全配置关闭firewalld selinux
  systemctl stop  firewalld  
  systemctl disable  firewalld   
  sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 
4. 时间同步
 yum -y install ntpdate  
 ntpdate time1.aliyun.com
6. kubeadm安装需要关闭swap 分区
  vim /etc/fstab  free -m 查看 如果有swap分区 需要关闭
7. 添加网桥过滤
   cat /etc/sysctl.d/k8s.cof  
   net.bridge.bridge-nf-call-ip6tables =1 
   net.bridge.bridge-nf-call-iptables =1 
   net.ipv4.ip_forward = 1  
   vm.swappiness = 0   
   modprobe br_netfilter  
   sysctl -p /etc/sysctl.d/k8s.conf  
8. 安装 ipvs
   yum -y install ipset ipvsadm
  cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF  

 权限改为 755   
 chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod |grep -e ip_vs -e nf_conntrack_ipv4 
9. 安装docker
  wget -O /etc/yum.repos.d/docker-ce.repo  https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo  
  yum -y install --setopt=obsoletes=0  docker-ce-18.06.3.ce-3.el7   
  使用18.06 高版本配置可能需要修改  
  systemctl enable  docker && systemctl start  docker
10. 修改资源配置
vim  /etc/docker/daemon.json   
{
 "exec-opts":["native.cgroupdriver=systemd"],
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
11. 集群软件安装
yum -y install --setopt=obsoletes=0 kubeadm-1.17.2-0 kubelet-1.17.2-0 kubectl-1.17.2-0
kubeadm  初始化集群  
kubelet 接受api-server 指令 管理pod  
kubectl  集群命令管理工具    
12. 修改配置
  cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
保持cgroupdriver  docker与kubelet 一致 
vim /etc/sysconfig/kublet  
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
systemctl enable kubelet 
  • 这里是我设置的代理 k8s 的镜像需要翻墙才能pull
mkdir -p /etc/systemd/system/docker.service.d &&
cat > /etc/systemd/system/docker.service.d/https-proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=192.168.1.5:9999/" "HTTPS_PROXY=192.168.1.5:9999/" "NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,"
EOF 
systemctl daemon-reload
systemctl restart docker
systemctl show --property=Environment docker  
13. 保存镜像传输到其他服务器
worker 服务器只需要这两个镜像  
docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy    
docker save -o pause .......
14. k8s 集群初始化
在master 节点 
kubeadm init --kubernetes-version=v1.17.3 --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=主机ip192.168.137.132
docker pull rancher/calico-cni:v3.8.1;
docker pull rancher/calico-node:v3.8.1;
docker pull calico/kube-controllers:v3.13.0-0-g15e951d;  
docker pull calico/pod2daemon-flexvol:release-v3.13;

下载 calico.yaml到~目录 我是在官网下载做了下面的修改  

9             - name: CLUSTER_TYPE
620               value: "k8s,bgp"
621             # Auto-detect the BGP IP address.
622             - name: IP
623               value: "autodetect"
624             - name: IP_AUTODETECTION_METHOD
625               value: "interface=ens.*"


             - name: CALICO_IPV4POOL_CIDR
639               value: "172.16.0.0/16"

15. 初始化之后需要做什么 在初始化结束会有提示
Your Kubernetes control-plane has initialized successfully!

创建文件夹 
  mkdir -p $HOME/.kube 
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
Then you can join any number of worker nodes by running the following on each as root:
在worker节点中执行下面内容 加入集群
kubeadm join 192.168.137.132:6443 --token hbb5ve.v0ho11tpni2gjw4i \
    --discovery-token-ca-cert-hash sha256:028e5215303b520ec0fa1d32e1812d238f148eb95440489dd48ffe4d4a6000f0 
  • 查看集群节点状态 kebectl get nodes
  • 查看集群健康状态 kubecel get cs 或者 kubectl cluster-info
  • 工作状态 kubectl get pods --namespace kube-system

集群工具 kubectl

 有 .kube/config 才可以使用kubectl  
 可以将这个文件复制到 worker机器 

Namespace 命名空间

  • 介绍
    多用户 实现资源隔离

属于逻辑隔离
属于管理边界
不属于网络边界(不需要部署多套网络构建)
可以针对每个 namespace做资源配额

  • 查看 NameSpace
    kubectl get namespace
    default 默认
    kube-node-lease 集群节点租约状态
    kube-public 所有用户都可访问 包括未认证用户
    kube-system kubernetes集群在使用
  • 创建NameSpace
    命令创建

kubectl create namespace test
yml资源清单创建
kubectl apply -f create-ns.yml

apiVersion: v1 
kind: Namespace 
metadata:
  name: demons2  
  • 删除NameSpace
kubectl delete ns test1  
kubectl deltete -f **.yml

最小管理单元pod

pod 是容器的封装
查看
kubectl get pods --ns default
创建
kubectl apply -f **.yml

apiVersion: v1 
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: nginx-pod
    image: nginx:latest
    ports:
    - name:nginxport
      containerPort:80
kubectl get pods -o wide   
生产环境最好不要直接访问pod  
删除pod    
kubectl  delete pods pods1  
yml文件删除  
kubectl delete -f **.yml  

k8s 核心概念controller 控制器

loop 方式监控pod 状态 如果发生删除会重新拉起

  • 控制器作用
对应用`运行的资源对象监控  
出现问题 重新拉起 达到期望状态  
  • 控制器分类 官网介绍更全
可以自定义 常见控制器   
Deployment  声明式 更新控制器  发布无状态应用 
ReplicaSet  副本集控制器  对Pod 进行规模扩大杰少
StatefulSet  有状态副本集 mysql  用于发布有状态应用  
DaemonSet   每一个Node 上运行一个副本  用于发布监控或日志收集  
Job 运行一次性作业任务  
CronJob  运行周期性任务  
  • Deployment 控制器介绍、
命令创建   默认 Deployment  
kubectl run nginx-app --image=nginx:latest -image-pull-policy-IfNotPresent --replicas=2   //2个pod运行 
kubectl get deployment.apps
kubectl get replicaset.apps
------------------------ 
apiVersion: apps/v1 s 
kind: Deployment
metadata:
  name: nginx-app2
spec:
 replicas: 1 #副本数量
 selector: #标签选择器  与pod 进行关联 
   matchLabels:
     app: nginx
 template: #pod 模板 
   metadata:
     labels:
       app: nginx
   spec:
      containers:
       - name: nginx-app2container
         image: nginx:latest
         imagePullPolicy: IfNotPresent
         ports:
         - name: nginxapp2
           containerPort: 80
  • 删除应用
    带有控制器的Pod 不能直接删除 会自动拉起

kubectl get deployment.apps
kubectl delete deployment.apps **

k8s 核心概念 service 服务

    不是实体服务 是一条iptables 或者 ipvs 的转发规则  
    通过service为pod客户端提供访问pod 的方法=客户端访问pod的入口  
    service 同pod 标签与pod 关联  
  • service 类型
-- ClusterIP  
 默认分配一个集群内部可以访问的虚拟ip 
-- NodePort  
在每一个Node 上分配一个端口作为外部访问  
-- oadBalancer  
工作在特定的 云服务上  aws  openstart  
-- ExternalName  
表示把几圈外部服务引入到集群内部来实现进群内部pod 与集群外部的服务进行通信  
- service 常用参数  
 port  访问service使用的端口  
 targetPort  pod 中容器端口 
 NodePort 通过 Node 实现外网访问k8s 内service (30000-32767)
  • 创建 service
命令行创建 默认创建为ClusterIp  
先创建应用  
kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=1  
创建service  
kubectl expose deployment.apps nginx-app --type=ClusterIP --target-port=80 --port=80


  • yml 创建service
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app2
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginapp2
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-app2
spec:
  type: ClusterIP
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  • 查看
    kubectl get service

kubectl get endpoints

  • 创建 NodePort 类型的service 只需要修改type即可
  • service 自带负载均衡 均匀访问多个 pod

标签: none

添加新评论