其他分享
首页 > 其他分享> > K8S安装、快速入门

K8S安装、快速入门

作者:互联网

文章目录

一、K8s快速入门

1. 简介

kubernetes简称k8s。是用于自动部署、可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。

中文官网:https://kubernetes.io/Zh/
中文社区:https://www.kubernetes.org.cn/
官方文档:https://kubernetes.io/zh/docs/home/
社区文档:https://docs.kubernetes.org.cn/

部署方式的进化:

在这里插入图片描述
详细请访问官方文档:https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/

2. 架构

文档:https://kubernetes.io/zh/docs/concepts/overview/components/

在这里插入图片描述

1)master节点架构

2)Node节点架构

3. 概念

在这里插入图片描述

二、K8s集群安装

1. 前置要求

  1. 准备一台或多台机器,操作系统 Centos7.x-86_x64。我的配置 3 台 Centos7
  2. 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多。我的配置 2核 2G 64G
  3. 集群中所有的机器之间网络互通
  4. 可以访问外网,需要拉取镜像

2. 配置Linux环境(所有节点都执行)

  1. 关闭防火墙

    systemctl stop firewalld
    systemctl disable firewalld
    
  2. 关闭 selinux

    sed -i 's/enforcing/disabled/' /etc/selinux/config
    setenforce 0
    
  3. 关闭swap

    swapoff -a #临时关闭
    sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭
    free -g #验证,swap必须为0
    
  4. 添加主机名与IP对应关系:

    查看主机名:

    hostname
    

    如果主机名不正确,可以通过 hostnamectl set-hostname <newhostname> 命令来指定新的 hostname。我的三台节点名:k8s-node1,k8s-node2,k8s-node3

    在三台机器中配置 /etc/hosts 以便可以互相通过 hostname 访问

    vim /etc/hosts
    10.211.55.19 k8s-node1	# 这里的IP要修改成hostname对应节点的IP
    10.211.55.21 k8s-node2
    10.211.55.20 k8s-node3
    
  5. 将桥接的 IPV4 流量传递到 iptables 的链:

    cat > /etc/sysctl.d/k8s.conf <<EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    

    应用规则:

    sysctl --system
    
  6. date 查看时间(可选)

yum -y install ntpupdate
ntpupdate time.window.com #同步最新时间

3. 所有节点安装 docker、kubeadm、kubelet、kubectl

Kubenetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。

1)安装Docker

  1. 卸载之前的docker

    $ sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
  2. 安装Docker -CE

    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 设置 docker repo 的 yum 位置
    $ sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
        
    $ sudo yum -y install docker-ce docker-ce-cli containerd.io
    
  3. 配置镜像加速
    registry-mirrors 后面使用自己的镜像加速地址,可以从阿里云镜像加速器获取

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
    	"exec-opts": ["native.cgroupdriver=systemd"],
    	"log-driver": "json-file",
    	"log-opts": {
    		"max-size": "100m" 
    	},
      	"registry-mirrors": ["https://r1fl0qlt.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  4. 启动 Docker 并且设置 Docker 开机启动

    sudo systemctl enable docker
    

2)添加阿里与Yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3)安装 kubeadm,kubelet 和 kubectl

安装

yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3

开机启动

systemctl enable kubelet && systemctl start kubelet

查看kubelet的状态:

systemctl status kubelet

查看 kubelet 版本:

> kubelet --version
Kubernetes v1.17.3

4)部署k8s-master

(1)master节点初始化

初始化 kubeadm,下面的命令会下载 k8s 组件的镜像:

$ kubeadm init \
--apiserver-advertise-address=10.211.55.19 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.17.3 \
--service-cidr=10.96.0.0/16  \
--pod-network-cidr=10.244.0.0/16

参数说明:

注意:如果执行上面的初始化命令报错了,下次再执行初始化命令前,先执行 kubeadm reset -f

执行结果:
如果看到下面的页面,则说明初始化成功
在这里插入图片描述

初始化完节点之后,根据日志的提示先执行这三条命令:

# 这个目录会保存连接配置
mkdir -p $HOME/.kube

# 认证文件保存到这个目录下
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

(2)安装 flannel

安装CNI网络插件,这里安装 flannel

创建个 flannel 的目录,

  1. 下载 yml 文件:

    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

    如果上面的网址下载不下来,就去 码云 flannel 上把这个 yml 文件复制或者下载下来

  2. 创建 flannel

    kubectl create -f kube-flannel.yml
    
  3. 查看是否成功运行
    可以看到 kube-flannel 是运行状态:

    [root@k8s-node1 flannel]# kubectl get pods --all-namespaces
    NAMESPACE     NAME                                READY   STATUS    RESTARTS   AGE
    kube-system   coredns-7d89d9b6b8-bjmsp            1/1     Running   0          36m
    kube-system   coredns-7d89d9b6b8-z46zp            1/1     Running   0          36m
    kube-system   etcd-k8s-node1                      1/1     Running   1          37m
    kube-system   kube-apiserver-k8s-node1            1/1     Running   1          37m
    kube-system   kube-controller-manager-k8s-node1   1/1     Running   1          37m
    kube-system   kube-flannel-ds-srf9w               1/1     Running   0          65s
    kube-system   kube-proxy-n64fp                    1/1     Running   0          36m
    kube-system   kube-scheduler-k8s-node1            1/1     Running   1          37m
    

5)添加从节点

  1. 查看所有节点(主节点运行)

    #获取所有节点
    $ kubectl get nodes
    NAME        STATUS   ROLES                  AGE   VERSION
    k8s-node1   Ready    control-plane,master   40m   v1.22.2
    
  2. 获取 Node 节点加入命令

    $ kubeadm token create --print-join-command
    kubeadm join 10.37.132.5:6443 --token yzd8bg.mzdp8ua5cyuggpdp --discovery-token-ca-cert-hash sha256:71216e7189e48bfedac9fce79c9dd6920b3354ff62023e7ea069848fa84a3861
    
  3. 在从节点运行输出的命令

    $ kubeadm join 10.37.132.5:6443 --token yzd8bg.mzdp8ua5cyuggpdp --discovery-token-ca-cert-hash sha256:71216e7189e48bfedac9fce79c9dd6920b3354ff62023e7ea069848fa84a3861
    
  4. 查看节点状态

    $ kubectl get nodes
    NAME        STATUS   ROLES                  AGE     VERSION
    k8s-node1   Ready    control-plane,master   68m     v1.22.2
    k8s-node2   Ready    <none>                 4m16s   v1.22.2
    k8s-node3   Ready    <none>                 4m12s   v1.22.2
    
    $ journalctl -u kubelet #查看kubelet日志
    

监控pod进度

watch kubectl get pod -n kube-system -o wide

等到所有的status都变为running状态后,再次查看节点信息:

[root@k8s-node1 ~]#  kubectl get nodes;                         NAME        STATUS   ROLES    AGE     VERSIONk8s-node1   Ready    master   3h50m   v1.17.3k8s-node2   Ready    <none>   3h3m    v1.17.3k8s-node3   Ready    <none>   3h3m    v1.17.3[root@k8s-node1 ~]# 

三、入门操作kubernetes集群

1. k8s上部署一个tomcat

kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8

其它命令:

# 获取所有的资源
$ kubectl get all

# 获取所有资源的详细信息
$ kubectl get all -o wide

# 获取 pods 的信息
kubectl get pods

2. 向外暴露端口

在master上执行

kubectl expose deployment tomcat6 --port=80 --target-port=8080 --type=NodePort 

查看服务,访问 k8s-node1:30916 (30916 是service自动分配的,服务器的 30916 端口,映射 pod 中的 80 端口)就可以访问到 tomcat :

# 查看 service 的信息
$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP        91m
tomcat6      NodePort    10.96.96.4   <none>        80:30916/TCP   12s

3. 动态扩容测试

# 查看deployment,只有一个副本
$ kubectl get deployment
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
tomcat6   1/1     1            1           8m44s

# 扩容成3个副本
$ kubectl scale --replicas=3 deployment tomcat6
deployment.apps/tomcat6 scaled

# 可以看到正在扩容中
$ kubectl get deployment
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
tomcat6   2/3     3            2           9m35s

4. 删除

$ kubectl get deployment
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
tomcat6   3/3     3            3           12m

$ kubectl delete deployment tomcat6
deployment.apps "tomcat6" deleted

$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP        91m
tomcat6      NodePort    10.96.96.4   <none>        80:30916/TCP   12s

$ kubectl delete service tomcat6
service "tomcat6" deleted

5. 格式化输出 yaml

# 打印前面部署 Tomcat 时使用的命令对应的 yaml
$ kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8 --dry-run='client' -o=yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: tomcat6
  name: tomcat6
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat6
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: tomcat6
    spec:
      containers:
      - image: tomcat:6.0.53-jre8
        name: tomcat
        resources: {}
status: {}

6. 使用 yaml 部署 tomcat

  1. 使用前一步打印的 yaml,删除一些无用配置,将 replicas 改成 3,使用 yaml 文件部署 3Tomcat

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: tomcat6
      name: tomcat6
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: tomcat6
      template:
        metadata:
          labels:
            app: tomcat6
        spec:
          containers:
          - image: tomcat:6.0.53-jre8
            name: tomcat
    
  2. 将上面的 yaml 保存至一个文件中 tomcat6.yaml

    $ kubectl apply -f tomcat6.yaml
    
    • apply:表示创建或者更新资源,删除则用 delete
    • -f:指定指定 yaml 文件

    查看 pod 的 yaml:

    # 查看 pod
    $ kubectl get pods
    NAME                       READY   STATUS    RESTARTS   AGE
    tomcat6-56fcc999cb-b4nt7   1/1     Running   0          2m49s
    tomcat6-56fcc999cb-pncn9   1/1     Running   0          2m49s
    tomcat6-56fcc999cb-wczpj   1/1     Running   0          2m49s
    
    # 查看 pod 的 yaml
    $ kubectl get pods tomcat6-56fcc999cb-b4nt7 -o yaml
    
  3. 删除用 yaml 创建的 Tomcat

    $ kubectl delete -f tomcat6.yaml
    

7. 一些官方文档

1)kubectl 操作文档

https://kubernetes.io/zh/docs/reference/kubectl/overview/

2)资源类型

https://kubernetes.io/zh/docs/reference/kubectl/overview/#%e8%b5%84%e6%ba%90%e7%b1%bb%e5%9e%8b

标签:kubectl,K8S,入门,--,tomcat6,k8s,安装,节点,kube
来源: https://blog.csdn.net/zyx1260168395/article/details/120666035