MUMU

vuePress-theme-reco MUMU    2018 - 2023
MUMU MUMU

Choose mode

  • dark
  • auto
  • light
推荐
  • DevOps

    • kubernetes
    • docker
  • 其他

    • 博客
    • IDEA
分类
  • 记录
  • 生活
  • 笔记
标签
时间轴
关于
GitHub (opens new window)
author-avatar

MUMU

30

文章

36

标签

推荐
  • DevOps

    • kubernetes
    • docker
  • 其他

    • 博客
    • IDEA
分类
  • 记录
  • 生活
  • 笔记
标签
时间轴
关于
GitHub (opens new window)
  • 环境搭建

    • k8s环境搭建
  • 实践讲解

    • k8s-deployment详解
    • k8s-service详解
  • 插件

    • k8s部署Dashboard

k8s环境搭建

vuePress-theme-reco MUMU    2018 - 2023

k8s环境搭建

MUMU 2020-09-09 UbuntuDevopsDockerk8s

# k8s依赖环境配置

准备了三台ubuntu18 虚拟机

IP ROTE Hostname
192.168.199.151 master master
192.168.199.152 worker worker1
192.168.199.153 worker worker2

# 设置主机名

依次设置各节点主机名

sudo hostnamectl set-hostname master

# 添加本地域名解析

sudo vim /etc/hosts
127.0.0.1 $(hostname)

# 关闭swap交换空间

# 不重启电脑,禁用启用swap,立刻生效

查看内存情况

free -h

停掉所有交换空间

sudo swapoff -a

查看所有的交换空间 如果没有任何输出则说明关成功了

sudo swapon -s

查看内存情况

free -h

# 重新启动电脑,永久禁用Swap

用vim修改/etc/fstab文件,在swap分区这行前加 # 禁用掉,保存退出

sudo vim /etc/fstab

重启节点(如果执行了上一个步骤,那么也可以不用马上重启,因为目前生效了)

sudo reboot

查看内存

free -h

# 关闭 SeLinux

setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 安装docker

sudo apt update
sudo apt install docker.io -y

# 安装k8s

# Master 额外执行下面命令

创建/etc/sysctl.d/k8s.conf文件,添加如下内容

sudo bash -c "cat > /etc/sysctl.d/k8s.conf" << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

执行命令使修改生效

sudo modprobe br_netfilter
sudo sysctl -p /etc/sysctl.d/k8s.conf

# 各节点安装 kubeadm, kubelet, kubectl

# 更新数据源

sudo apt-get update && sudo apt-get install -y apt-transport-https

# 获取国内数据源库阿里云更新key

sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

# 配置国内数据源阿里云k8s下载路径

sudo bash -c "cat > /etc/apt/sources.list.d/kubernetes.list" << EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

# 安装kubeadm, kubelet, kubectl

sudo apt-get update
sudo apt-get install -y kubelet=1.16.1-00 kubeadm=1.16.1-00 kubectl

# 配置k8s

# 查看kubeadm需要的镜像版本

kubeadm config images list

可以看到kubeadm默认拉去的镜像是从k8s.gcr.io仓库拉去镜像,但是这个仓库在国外,如果没有科学上网的条件的话可以参考一下,如果可以科学上网(如:用的国外服务器)的可以省略以下步骤

# 制作离线镜像

sudo docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.16.1
sudo docker pull mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.1
sudo docker pull mirrorgooglecontainers/etcd-amd64:3.3.15-0
sudo docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.16.1
sudo docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.16.1
sudo docker pull mirrorgooglecontainers/pause:3.1
sudo docker pull coredns/coredns:1.6.2

这里我们通过国内的镜像仓库mirrorgooglecontainers拉取的镜像,然后通过docker tag将拉下来的镜像名改成k8s.gcr.io下的镜像,这样就可以在kubeadm init能够正常执行了。

sudo docker tag mirrorgooglecontainers/kube-apiserver-amd64:v1.16.1 k8s.gcr.io/kube-apiserver:v1.16.1
sudo docker tag mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.1 k8s.gcr.io/kube-controller-manager:v1.16.1
sudo docker tag mirrorgooglecontainers/kube-scheduler-amd64:v1.16.1 k8s.gcr.io/kube-scheduler:v1.16.1
sudo docker tag mirrorgooglecontainers/kube-proxy-amd64:v1.16.1 k8s.gcr.io/kube-proxy:v1.16.1
sudo docker tag mirrorgooglecontainers/etcd-amd64:3.3.15-0 k8s.gcr.io/etcd:3.3.15-0
sudo docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
sudo docker tag coredns/coredns:1.6.2 k8s.gcr.io/coredns:1.6.2

可以删除之前拉取的mirrorgooglecontainers下的重复镜像

sudo docker rmi mirrorgooglecontainers/kube-apiserver-amd64:v1.16.1
sudo docker rmi mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.1
sudo docker rmi mirrorgooglecontainers/etcd-amd64:3.3.15-0
sudo docker rmi mirrorgooglecontainers/kube-scheduler-amd64:v1.16.1
sudo docker rmi mirrorgooglecontainers/kube-proxy-amd64:v1.16.1
sudo docker rmi mirrorgooglecontainers/pause:3.1
sudo docker rmi coredns/coredns:1.6.2

# 初始化Master

注意:以下骤仅在Master节点执行

# kubeadm初始化

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

如果Master初始化成功,那你现在可以大声呼叫 “去吧 皮卡丘!”,看到输出的最后一行,这就是Worker加入Master的命令,这里可以先记下,待会再去Worker节点站斗

sudo kubeadm join 192.168.199.151:6443 --token tearz2.rvquwsv5gd7ds8tn \
    --discovery-token-ca-cert-hash sha256:dd0674653ecc31f204a8f81d0eb91a14664a005fb05a61f56532fd977f14c7a4 

注意:kubeadm init生成的token有效期只有1天,如果你的node节点在使用kubeadm join时出现如下错误

[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
error execution phase preflight: unable to fetch the kubeadm-config ConfigMap: failed to get config map: Unauthorized

请到master上检查你所使用的token是否有效,kubeadm token list

49y4v3.jxq5w76jj5hh028u   <invalid>   2019-04-13T15:00:47-04:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token
8jxvj4.5lop20zjbu48h6kl   23h         2019-04-25T10:21:41-04:00   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token

如果token忘记了或者过期了,也不需要担心执行以下命令,生产不过期token

kubeadm token create --print-join-command --ttl 0

# 普通用户使用kubectl命令

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

而需要这些配置命令的原因是: Kubernetes 集群默认需要加密方式访问。所以,这几条命令,就是将刚刚部署生成的 Kubernetes 集群的安全配置文件,保存到当前用户的.kube 目录下, kubectl 默认会使用这个目录下的授权信息访问 Kubernetes 集群。

# 部署网络插件

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

现在可以使用kubectl查看pod状态了

kubectl get pods -n kube-system

# 部署Worker节点

在worker节点下执行

sudo kubeadm join 192.168.199.151:6443 --token tearz2.rvquwsv5gd7ds8tn \
    --discovery-token-ca-cert-hash sha256:dd0674653ecc31f204a8f81d0eb91a14664a005fb05a61f56532fd977f14c7a4 

在master 执行,查看worker节点是否成功加入

kubectl get nodes

# kubeadm常用命令

help        Help about any command 
  init        Run this command in order to set up the Kubernetes control plane. # master上执行,初始化所有的master组件
  join        Run this on any machine you wish to join an existing cluster # node上执行,加入master
  reset       Run this to revert any changes made to this host by 'kubeadm init' or 'kubeadm join'. # 清理 init,join的环境
  token       Manage bootstrap tokens. # token的增删查
  upgrade     Upgrade your cluster smoothly to a newer version with this command. # 更新集群
  version     Print the version of kubeadm

# 感谢大佬

  • 国内环境安装k8s (opens new window) chenzhenqi
  • 使用 kubeadm 安装 kubernetes v1.16.0 (opens new window) eastonliu
  • 国内环境 ubuntu18 安装 k8s (opens new window) 良师益友 jdkhome
在 GitHub 上编辑此页 (opens new window)
Last Updated: 2023/7/12 03:05:36