k8s-kubeadm1.7安装

参考文章

mac 重新安装了虚拟机 需要更新 know_host 文件

1
2
3
4
5
ssh-keygen -R 172.16.182.130
ssh-keygen -R 172.16.182.131
ssh-keygen -R 172.16.182.132
ssh-keygen -R 172.16.182.139
ssh-keygen -R 172.16.182.140
  • 时间同步 : yum install -y ntpdate ntpdate ntp.api.bz

安装1.7 kube版本

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

下载 flannel 文件

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

下载 flannel v12.0版本的镜像

1
2
3
4
5
6
7
8
9
10
11
打上标签:
docker tag quay.io/coreos/flannel:v0.12.0-arm64 registry.cn-shenzhen.aliyuncs.com/stool/flannel:v12.0

推送镜像:
docker push registry.cn-shenzhen.aliyuncs.com/stool/flannel:v12.0

拉取镜像:
docker pull registry.cn-shenzhen.aliyuncs.com/stool/flannel:v12.0


docker tag registry.cn-shenzhen.aliyuncs.com/stool/flannel:v12.0 quay.io/coreos/flannel:v0.12.0-arm64

安装准备好一些主机的功能,进行关闭主机然后再克隆

  • 添加主机名与IP对应关系(记得设置主机名):
1
2
3
4
$ cat /etc/hosts
172.16.182.130 k8s-master
172.16.182.139 k8s-node1
172.16.182.140 k8s-node2
  • 最新文件

    1
    2
    3
    scp ~/Desktop/1.7flannel.yml root@172.16.182.130:/root/kube-flannel.yml

    > kubectl apply -f ./kube-flannel.yml
  • 设置 hostname

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    hostnamectl set-hostname k8s-master
    hostnamectl set-hostname k8s-node1
    hostnamectl set-hostname k8s-node2



    hostnamectl set-hostname c-k8s-master
    hostnamectl set-hostname c-k8s-node1
    hostnamectl set-hostname c-k8s-node2
    hostnamectl set-hostname c-k8s-node3
    hostnamectl set-hostname c-k8s-node3

执行的操作 : 1 master 2 node

  • init master 节点
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    kubeadm init \
    --apiserver-advertise-address=172.16.182.130 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.17.3 \
    --service-cidr=10.1.0.0/16 \
    --pod-network-cidr=10.244.0.0/16




    > systemctl enable kubelet



    result :


    To start using your cluster, you need to run the following as a regular user:

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
    https://kubernetes.io/docs/concepts/cluster-administration/addons/

    Then you can join any number of worker nodes by running the following on each as root:

    kubeadm join 172.16.182.130:6443 --token 8ljs63.gnehsbfhvt8vbp4m \
    --discovery-token-ca-cert-hash sha256:879064f5fe917a84788cfd5601ab29a666167f37881ea0084c707afc82164fc1

使用kubectl工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

> mkdir -p $HOME/.kube

> sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

> sudo chown $(id -u):$(id -g) $HOME/.kube/config


# 查看节点内容进行测试 kubectl 是否安装成功

> kubectl get nodes

# 显示内容 成功安装

NAME STATUS ROLES AGE VERSION
localhost.localdomain NotReady master 4m26s v1.15.0



> 查看的 k8s的全部服务的运行的情况 : kubectl get pods --all-namespaces

[root@k8s-master ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-9d85f5447-492bj 0/1 Pending 0 3m23s
kube-system coredns-9d85f5447-bwzpq 0/1 Pending 0 3m23s
kube-system etcd-k8s-master 1/1 Running 0 3m19s
kube-system kube-apiserver-k8s-master 1/1 Running 0 3m19s
kube-system kube-controller-manager-k8s-master 1/1 Running 0 3m19s
kube-system kube-proxy-tfz8j 1/1 Running 0 3m23s
kube-system kube-scheduler-k8s-master 1/1 Running 0 3m19s
  • 添加网络服务: flannel

  • 参考文章 : https://yq.aliyun.com/articles/702158

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    docker pull quay.io/coreos/flannel:v0.12.0-arm64

    kubectl apply -f ./kube-flannel.yml


    来自一篇文章:

    推荐等到 node1 状态 Ready 之后再安装 flannel
    因为 flannel 中的有些镜像在 quay-mirror.qiniu.com,国内无法访问,故可以转到阿里云镜像中心获取,然后再将其重新打 tag 为 quay.io/coreos/flannel:v0.11.0-amd64 中的名称即可。


    [root@master ~]# cat processFlannelImage.sh
    #!/bin/bash
    docker pull quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
    docker tag quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
    [root@master ~]# chmod +x processFlannelImage.sh
    [root@master ~]# ./processFlannelImage.sh
  • 查看详情内容:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    [root@k8s-master ~]# kubectl get pods --all-namespaces
    NAMESPACE NAME READY STATUS RESTARTS AGE
    kube-system coredns-9d85f5447-492bj 0/1 Pending 0 8m16s
    kube-system coredns-9d85f5447-bwzpq 0/1 Pending 0 8m16s
    kube-system etcd-k8s-master 1/1 Running 0 8m12s
    kube-system kube-apiserver-k8s-master 1/1 Running 0 8m12s
    kube-system kube-controller-manager-k8s-master 1/1 Running 0 8m12s
    kube-system kube-flannel-ds-amd64-qc7hw 0/1 Init:0/1 0 3m39s
    kube-system kube-flannel-ds-amd64-r6wsc 0/1 Init:0/1 0 4m21s
    kube-system kube-flannel-ds-amd64-s964n 0/1 Init:0/1 0 3m33s
    kube-system kube-proxy-587kh 1/1 Running 0 3m39s
    kube-system kube-proxy-pnhfw 1/1 Running 0 3m33s
    kube-system kube-proxy-tfz8j 1/1 Running 0 8m16s
    kube-system kube-scheduler-k8s-master 1/1 Running 0 8m12s



    查看详情:
    kubectl describe pods kube-flannel-ds-amd64-qc7h -n kube-system


    发现在 docker pull 镜像内容:


    docker pull quay.io/coreos/flannel:v0.12.0-amd64



    mac 机器下载比较快:
    docker save -o ~/Desktop/k8s/flannel/f-image quay.io/coreos/flannel:v0.12.0-amd64

    scp ~/Desktop/k8s/flannel/f-image root@172.16.182.139:/root/flannel
    scp ~/Desktop/k8s/flannel/f-image root@172.16.182.140:/root/flannel

终于成功的把网络flannel装到 服务上

  • 进行简单的测试 nginx 部署到3个节点上的 k8s 发布:

  • pod 文件内容 nginx-deployment.yaml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nginx-deployment
    labels:
    app: nginx
    spec:
    replicas: 3
    selector:
    matchLabels:
    app: nginx
    template:
    metadata:
    labels:
    app: nginx
    spec:
    containers:
    - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
  • 执行 pod 指令 : kubectl apply -f nginx-pod.yaml

  • service 文件内容 nginx-service.yaml:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    apiVersion: v1
    kind: Service
    metadata:
    name: nginx-service
    labels:
    app: nginx
    spec:
    ports:
    - port: 88
    targetPort: 80
    selector:
    app: nginx
    type: NodePort
  • 执行 service 指令 : kubectl create -f nginx-service.yaml 为了让主机访问 k8s 提供的nginx 服务,我们需要在 nginx-service.yaml 规范 spec 中指定 type 为 NodePort

  • 为了让主机访问 k8s 提供的nginx 服务,我们需要在 nginx-service.yaml 规范 spec 中指定 type 为 NodePort

  • 查看服务执行的情况:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    > kubectl get pod,svc
    NAME READY STATUS RESTARTS AGE
    pod/nginx-deployment-54f57cf6bf-69b29 1/1 Running 0 2m29s
    pod/nginx-deployment-54f57cf6bf-ch6dg 1/1 Running 0 2m29s
    pod/nginx-deployment-54f57cf6bf-lzmkh 1/1 Running 0 2m29s

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 57m
    service/nginx-service NodePort 10.1.167.218 <none> 88:32342/TCP 18s



    + 查看服务的详情:
    ```text
    > kubectl get service/nginx-service

    service/nginx-service NodePort 10.1.167.218 <none> 88:32342/TCP 18s
  • 根据信息,可以访问: MasterIP:NodePort –> 172.16.182.130:32342 正常的访问.

    1
    2
    3
    进入 node 节点下进行 
    docker logs -f <id>
    打印日志信息 可以正常的负载均衡到3台的 nginx 的机器上

总结

1
2
3
4
5
不需要配置 ssh, 有些文档中写需要配置,但是没必要
部署前一定要对部署的环境变量设置
配置信息尽量脚本化
master 初始化时的参数一定要指定正确并知道其含义
在初始化好 master 节点后,先不要部署网络相关的内容,先将 node 加入集群,并等到 node 的状态为 Ready 后再部署网络相关的组件
感谢您的阅读,本文由 左之右 版权所有。如若转载,请注明出处:左之右(https://zuoyoulai.github.io/2020/03/20/k8s-kubeadm1-7%E5%AE%89%E8%A3%85/
k8s学习
jenkins学习