Featured image of post centos7 使用kubeadm 安装 k8s集群

centos7 使用kubeadm 安装 k8s集群

centos7 使用kubeadm k8s集群安装

环境

  • centos 7.6
  • k8s 1.13.4
  • 3台机器 1台master 2台worker

准备工作

关闭swap

执行swapoff临时关闭swap。重启后会失效,若要永久关闭,可以编辑/etc/fstab文件,将其中swap分区一行注释掉

至于为什么关闭这里有个说明:https://github.com/kubernetes/kubernetes/issues/53533,亦有说影响性能的 https://www.zhihu.com/question/374752553

关闭防火墙和selinux

根据文档来的:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

1# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
2setenforce 0
3sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

开放端口

Image

允许 iptables 检查桥接流量

1cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
2br_netfilter
3EOF
4
5cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
6net.bridge.bridge-nf-call-ip6tables = 1
7net.bridge.bridge-nf-call-iptables = 1
8EOF
9sudo sysctl --system

安装docker(全部节点)

安装

 1#安装需要的工具
 2yum install -y yum-utils   device-mapper-persistent-data   lvm2
 3#设置源
 4yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 5#查看有哪些docker版本
 6yum list docker-ce --showduplicates | sort -r
 7#安装特定的版本
 8yum makecache fast && yum install -y docker-ce-18.09.8-3.el7 docker-ce-cli-18.09.8-3.el7 containerd.io-1.2.0-3.el7
 9#启动docker
10systemctl daemon-reload && systemctl restart docker
11#设置为开机启动
12systemctl enable docker.service

修改Docker默认存储位置

 1systemctl stop docker 或者 service docker stop
 2 
 3#然后移动整个/var/lib/docker目录到目的路径:
 4mv /var/lib/docker /home/data/docker
 5ln -s /home/data/docker /var/lib/docker
 6#reload配置文件
 7systemctl daemon-reload
 8#重启docker
 9systemctl restart docker.service
10#设置docker 开机启动
11systemctl enable docker
12 
13//当然你也可以通过修改配置文件的方式
14vim /etc/docker/daemon.json
15 
16{"registry-mirrors": ["http://7e61f7f9.m.daocloud.io"],"graph": "/new-path/docker"}

阿里云镜像加速

 1#访问:https://cr.console.aliyun.com/cn-beijing/instances/mirrors
 2#找到加速方法,如:
 3 
 4sudo mkdir -p /etc/docker
 5sudo tee /etc/docker/daemon.json <<-'EOF'
 6{
 7  "registry-mirrors": ["https://se35r65b.mirror.aliyuncs.com"]
 8}
 9EOF
10sudo systemctl daemon-reload
11sudo systemctl restart docker

安装kubeadm, kubelet和kubectl(master和worker都装)

添加 yum 仓库 创建/etc/yum.repos.d/kubernetes.repo,文件如下内容

1[kubernetes]
2name=Kubernetes
3baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
4enabled=1
5gpgcheck=1
6repo_gpgcheck=1
7gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

安装 kubelet kubectl 和 kubeadm

1yum install -y kubelet-1.13.4 kubeadm-1.13.4 kubectl-1.13.4 kubernetes-cni-0.6.0 
2systemctl enable --now kubelet

从阿里云手动摘取镜像

执行kubeadm config images pull查 看到 gcr.io 的连接,如果拉取成功可以进入下一步。如果失败,说明无法访问 grc.io。这时需要手动拉取镜像,可以执行下面的脚本,从阿里云拉取相应镜像

 1#!/bin/bash
 2images=(
 3    kube-apiserver:v1.13.4
 4    kube-controller-manager:v1.13.4
 5    kube-scheduler:v1.13.4
 6    kube-proxy:v1.13.4
 7    pause:3.1
 8    etcd:3.2.24
 9    coredns:1.2.6
10)
11for imageName in ${images[@]} ; do
12    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
13    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
14done

初始化(master)

记得加入 pod-network-cidr 因为后面的网络组件用的是flannel

1kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers

安装成功提示

 1Your Kubernetes master has initialized successfully!
 2To start using your cluster, you need to run the following as a regular user:
 3  mkdir -p $HOME/.kube
 4  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 5  sudo chown $(id -u):$(id -g) $HOME/.kube/config
 6You should now deploy a pod network to the cluster.
 7Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
 8  https://kubernetes.io/docs/concepts/cluster-administration/addons/
 9You can now join any number of machines by running the following on each node
10as root:
11  kubeadm join 10.22.9.162:6443 --token e225cp.14g848dy4vpoas75 --discovery-token-ca-cert-hash sha256:aaf9910fb2b94e8c2bc2aea0b2a08538796d8322331561ef1094bebe8a7a790f

第一次使用 Kubernetes 集群所需要的配置命令

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

这些配置命令的原因是:Kubernetes 集群默认需要加密方式访问。所以,这几条命令,就是将刚刚部署生成的 Kubernetes 集群的安全配置文件,保存到当前用户的.kube 目录下,kubectl 默认会使用这个目录下的授权信息访问 Kubernetes 集群。如果不这么做的话,我们每次都需要通过 export KUBECONFIG 环境变量告诉 kubectl 这个安全配置文件的位置。

master节点生成其他节点加入的方式

1kubeadm token create --print-join-command

部署 flannel 网络组件

1kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

查看状态

1# 用 kubectl get 命令来查看当前唯一一个节点的状态了
2kubectl get nodes
3# 用 kubectl describe 来查看这个节点(Node)对象的详细信息、状态和事件(Event)
4kubectl describe node master
5# 通过 kubectl get 重新检查 Pod 的状态:
6kubectl get pods -n kube-system
7# 部署过程中任何环节有问题都可以查看日志 
8journalctl -l -u kubelet

master 节点配置

  • 删除master节点默认污点 taint:污点的意思。如果一个节点被打上了污点,那么pod是不允许运行在这个节点上面的 默认情况下集群不会在master上调度pod,如果偏想在master上调度Pod,可以执行如下操作:
1#查看污点
2kubectl describe node master|grep -i taints
3#删除污点
4kubectl taint nodes master node-role.kubernetes.io/master-

加入集群(worker)

利用之前master 初始化的信息加入集群

1kubeadm join 10.22.9.162:6443 --token 43t2na.80oiehldy76rw6lz --discovery-token-ca-cert-hash sha256:67fd28cb6fd03242eda63c7a395096aba1a6784f7234a9b6269ff0941e9070e3

加入成功后在master查看集群状态

1kubectl get nodes

安装Dashboard UI(master)

获得配置文件

1wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

手动获取镜像

1docker pull anjia0532/google-containers.kubernetes-dashboard-amd64:v1.10.0
2docker tag  anjia0532/google-containers.kubernetes-dashboard-amd64:v1.10.0   k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0
3docker rmi  anjia0532/google-containers.kubernetes-dashboard-amd64:v1.10.0

修改配置文件(ports部分)

 1# ------------------- Dashboard Service ------------------- #
 2kind: Service
 3apiVersion: v1
 4metadata:
 5  labels:
 6    k8s-app: kubernetes-dashboard
 7  name: kubernetes-dashboard
 8  namespace: kube-system
 9spec:
10  type: NodePort
11  ports:
12    - port: 443
13      targetPort: 8443
14      nodePort: 30001
15  selector:
16    k8s-app: kubernetes-dashboard

运行并查看状态

1kubectl apply -f   kubernetes-dashboard.yaml
2#通过以下命令查看 pod 状态
3kubectl get pods -n kubernetes-dashboard
4kubectl get pods,svc -n kubernetes-dashboard

登录

1##创建管理员
2kubectl create serviceaccount dashboard-admin -n kube-system
3kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
4##获取token 
5kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | grep dashboard-admin | awk '{print $1}')

Image

完全清除或卸载K8s

This a gist for quick uninstall kubernetes If the cluster is node, First delete it from master

1kubectl drain <node name> — delete-local-data — force — ignore-daemonsets
2kubectl delete node <node name>

Then remove kubeadm completely

 1kubeadm reset 
 2# on debian base 
 3sudo apt-get purge kubeadm kubectl kubelet kubernetes-cni kube* 
 4#on centos base
 5sudo yum remove kubeadm kubectl kubelet kubernetes-cni kube*
 6# on debian base
 7sudo apt-get autoremove
 8#on centos base
 9sudo yum autoremove
10 
11sudo rm -rf ~/.kube

参考:

Image

关注公众号 获取更多精彩内容

位旅人路过 次翻阅 初次见面