Kubernetes介绍和部署,使用

1.k8s kubernetes来自希腊语舵手,google, 8是ubernete

1.管理docker容器 go写的(并发)
2.用于微服务
3.cncf云原生基金会

2.mater(管理节点)和nodes(微服务节点)

3.部署

1.minikube kind官网在线测试语句
2.kubeadm(官方)(安装比较方便 添加)
3.github下载二进制包
4.yum(老)
5.大神封装的环境
6.买云服务商提供的 阿里云

4.kubeadm

  1. cent7 2g2core
  2. interact network between two nodes(download flannel.yum file connect network)
  3. forbid swap areas ,firework
  4. xshell 查看—>撰写–>send cmd at the same time
  5. kubelet(manage POD and container,in every node of cluster )
    kubeadm(init cluster)
    kubectl(client can connect it )

5.蓝绿发布 预发布(nginx 摘一台机器发布,其他其它的可以正常运行,然后再摘除运行)

6.!!!牛 linux插件直接上传选择的文件

 yum install lrzsz -y  
 rz   #upload file
 sz  #download file

7.部署过程

1.关闭防火墙和selinux和swap(k8s为了提供性能关闭虚拟内存) mater和nodes同时配置

         systemctl stop firewalld
         systemctl disable firewalld
         sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久
setenforce 0  #临时close swap
          sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
swapoff -a #临时
        //改host文件方便访问
    cat >> /etc/hosts << EOF
	192.168.192.100 k8smaster
	192.168.172.101 k8snode
	EOF
             //改k8s,让网络生效配置文件
              cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
             //执行命令
            sysctl --system  #生效
             # 时间同步
               yum install ntpdate -y
ntpdate time.windows.com

2.安装docker19 mater和nodes同时配置

         yum install wget -y
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
         yum install docker-ce-19.03.13 -y
       //改docker加速配置
      vim /etc/docker/daemon.json
     {
"registry-mirrors": ["https://gg3gwnry.mirror.aliyuncs.com"]
}

    //启动服务
    systemctl enable docker.service
    //k8s阿里源
 cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
   //安装
   yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -y
   //启动服务
   systemctl enable kubelet.service
   //查看服务和版本
     yum list installed | grep kubelet
yum list installed | grep kubeadm
yum list installed | grep kubectl
    kubelet --version

3.master节点执行init命令 会生成join命令

  kubeadm init --apiserver-advertise-address=192.168.172.134 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

4.master复制配置文件

   mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
 //得到节点
kubectl get nodes

5.join命令如果被重复执行,必须删除节点重启node节点

       //master生成命令,给node执行join,node不用init
//!!! 主节点的 /etc/kubernetes/admin.conf 一定要复制到node 不然not connection
//坑hostname作为k8s的简单名,不能重复 ,用nmtui修改
//坑 删除“$HOME/.kube/config”文件并执行kubeadm reset命令方可解除 ,(出现各种配置文件和端口占用)
   //!!!
  //查看master init生成的join命令
 kubeadm token create --print-join-command 
  //删除节点
    kubectl drain node1 --delete-local-data --force --ignore-daemonsets
  kubectl delete nodes node1
   //重新加入节点
//disabled_plugins = []

   //必须重启节点
   kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
systemctl start docker
systemctl start kubelet

6.从节点执行master生成的join命令

   kubeadm join 192.168.172.132:6443 --token wa5bif.zfuvbesevdfvf4of \
--discovery-token-ca-cert-hash sha256:87cf5828d54dd80da13c4b57c57360370ea0267a7cc3991989ca3006cf3e44d8 

7.节点状态都是notready(坑,节点重启也要重新提交网络)(可以打通master和node内部访问的端口),要在master配置网络(其实都可以,apply上去就好了)
(重启只要主节点还在,就会重新部署从节点的pod)

   wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    kubectl apply -f kube-flannel.yml
    //等待片刻...,发现pod flannel
    kubectl get nodes
     

8.pod 一个可运行1/多个docker容器

9.k8s部署容器化应用nginx

  1. 打jar/war包

  2. 写Dockerfile生成镜像

  3. kubectl create deployment nginx --image=镜像名,暴露端口

  4. 镜像运行在pod中

   //下面重复启动如何删除节点
  //部署nginx,通过docker间接创建容器看到running,可能在不同容器运行
   //暴露端口
   //查看控制节点,和子节点的状态, 暴露节点的服务
        kubectl get deploy
        kubectl get pod   //或者pods
       kubectl get services
   //生成节点
       kubectl  delete deployment nginx //pod
   //默认在default   namespace创建
kubectl create deployment nginx --image=nginx

kubectl expose deployment nginx --port=80 --type=NodePort

kubectl get pod,svc

#部署tomcat

kubectl create deployment tomcat --image=tomcat

kubectl expose deployment tomcat --port=8080 --type=NodePort  

//运行springboot项目!!!,记得先测试jar包成功,不然也是会报PullErr的
//写Dockerfile文件

FROM openjdk:8-jdk
VOLUME /tmp
ADD target/demo.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

//打包为镜像

docker build -t 38-springboot-k8s-1.0.0-jar .
  //spingboot试运行,可以空运行生成yaml文件,然后提交yaml到k8s运行
kubectl create deployment springboot-k8s --image=38-springboot-k8s-1.0.0-jar --dry-run=client -o yaml > deploy.yaml
//改yaml在本地拉取,默认远程拉取,不行包PullErr错误
vi deploy.yaml文件里面container镜像从本地拉取;
    imagePullPolicy: Never
//提交到k8s
kubectl apply -f deploy.yaml
//暴露端口
kubectl expose deployment springboot-k8s --port=8080 --type=NodePort
kubectl get pod,svc
  //访问从内:外

10.k8s dashboard 使用页面管理
//提交文件到k8s拉镜像

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

kubectl apply -f recommended.yaml
 //文件修改配置文件里,可以用内部修改配置文件!!!(get pod无法看到已经启动的端口)
   kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
  //生成token复制到访问页面dashboard

kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

11.3种端口

  1. nodePort向外暴露的端口
    // 优点 :type:NodePort可以暴露端口,yaml有写不用写语句 nodeport指定端口
    //不足: 1.一个服务一个端口使用2.只能使用30000-32767端口 3.如果虚拟机ip变化,需要人工处理(ip被写进配置了)
  1. targetPort 容器的端
  2. port 集群服务之间内部的端口

12.ingress入口(生产使用,不是内置的) 相当于网关,代替nodePort直接暴露关机端口可能变化
//有多种方式安装,我们使用拉取 nginx的方式
//下载deploy.yuml文件,改image的地址
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml

        spec:
    329       hostNetwork: true   //添加 
    330       dnsPolicy: ClusterFirst
    331       containers:
    332         - name: controller
    333           image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.33.0  //修改
    334           imagePullPolicy: IfNotPresent
//rule.yaml用于配置路由的规则,比如外面要访问到www.abc.com才能直接访问到内部80nginx端口
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: k8s-ingress
spec:
     rules:
     - host: www.abc.com
       http:
           paths:
           - pathType: Prefix
             path: /
             backend:
                 service:
                      name: nginx
                      port:
                        number: 80
 
     kubectl apply -f rule.yaml
      //如果之前存在
     kubectl delete ing k8s-ingress
     //查看配置的规则,记住要看规则的地址,客户端通过域名和ip同时访问服务器,然后通过ingress自动映射到pod的内部端口80
     //要在规则配置容器的内部端口才能访问!!!  
    kubectl get ing
 
     kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
//windows模拟访问到C:\Windows\System32\drivers\etc\hosts添加192.168.192.100 www.abc.com
//提交的任务如果有错误可以 kubectl delete servive/deploy/pod xx

//在客户端访问www.abc.com会跳到nginx页面

13.部署springcloud项目
//k8s部署无状态访问(静态数据) pod删除掉数据也保存下来没有影响下一次部署, euraka是有状态访问,影响灰度发布, 数据库会动态增加数据
//!!!到工作节点上传jar和Dockerfile
//先部署提供者和消费者,再部署网关,在加ingress(rule)
//和springboot流程一致,增加了ingress
//查看容器日志

kubectl logs -f xxxpods

//deploy是controller的类型,还可以部署定时任务…

14.动态扩容缩容
//改yaml的replicate的数量,注册中心会知道注册了多少台服务器
//如果在运行,更新配置文件

   vi deploy.yaml文件里面container镜像从本地拉取;
   //修改集群数
   spec:
        replicas: 2
  kubectl apply -f deploy.yaml

你可能感兴趣的:(kubernetes,容器,云原生)