1、kubernetes安装介绍

1.1 K8S架构图

1.2 K8S搭建安装示意图

2、安装kubernetes

2.1  关闭防火墙

在每台机器上关闭防火墙:

① 关闭服务,并设为开机不自启

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
或者
$ sudo ufw disable

② 清空防火墙规则

$ sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
$ sudo iptables -P FORWARD ACCEPT

2.2 关闭 swap 分区

如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为false 来忽略 swap on),故需要在每台机器上关闭 swap 分区:

# 临时关闭
swapoff -a # 编辑/etc/fstab,注释掉包含swap的那一行即可,重启后可永久关闭

2.3 配置阿里源

sudo echo "deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list

然后更新下:

sudo apt update

如果遇到以下问题:

可以记下提示的PUBKEY的最后8位,这里是BA07F4FB,然后执行:

gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB
gpg --export --armor BA07F4FB | sudo apt-key add -
sudo apt-get update

2.4. 安装组件

sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl #确保不会被自动更新

2.5 配置kubelet的cgroup drive

需要确保kubelet的cgroup drive在docker的一致。
分别可以通过以下命令查看:

docker info | grep -i cgroup

cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

若显示不一样,则添加或修改Environment="KUBELET_CGROUP_ARGS=--cgroup-dirver=cgroupfs"

systemctl daemon-reload
systemctl restart kubelet

2.6. 启动kubelet

systemctl enable kubelet && systemctl start kubelet

2.7. 下载K8S的Docker镜像

/etc/apt/sources.list中添加阿里源:

deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe

sudo apt update更新下源。

首先使用kubeadm config images list显示我们需要下载的镜像。

然后从mirrorgooglecontainers上把这些镜像都拉下来,以免在初始化的时候从k8s.gcr.io拉取:

试过部分国内镜像源没有v1.18.3镜像,从https://hub.docker.com//mirrorgcrio/xxx 拉取k8s.gcr.io对应的镜像有效

# docker pull镜像拉取命令
docker pull mirrorgcrio/kube-apiserver:v1.18.3
docker pull mirrorgcrio/kube-controller-manager:v1.18.3
docker pull mirrorgcrio/kube-scheduler:v1.18.3
docker pull mirrorgcrio/kube-proxy:v1.18.3
docker pull mirrorgcrio/pause:3.2
docker pull mirrorgcrio/etcd:3.4.3-0
docker pull mirrorgcrio/coredns:1.6.7 # docker tag镜像重命名
docker tag mirrorgcrio/kube-apiserver:v1.18.3 k8s.gcr.io/kube-apiserver:v1.18.3
docker tag mirrorgcrio/kube-controller-manager:v1.18.3 k8s.gcr.io/kube-controller-manager:v1.18.3
docker tag mirrorgcrio/kube-scheduler:v1.18.3 k8s.gcr.io/kube-scheduler:v1.18.3
docker tag mirrorgcrio/kube-proxy:v1.18.3 k8s.gcr.io/kube-proxy:v1.18.3
docker tag mirrorgcrio/pause:3.2 k8s.gcr.io/pause:3.2
docker tag mirrorgcrio/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag mirrorgcrio/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7 # docker image rm命令删除原始镜像
docker image rm mirrorgcrio/kube-apiserver:v1.18.3
docker image rm mirrorgcrio/kube-controller-manager:v1.18.3
docker image rm mirrorgcrio/kube-scheduler:v1.18.3
docker image rm mirrorgcrio/kube-proxy:v1.18.3
docker image rm mirrorgcrio/pause:3.2
docker image rm mirrorgcrio/etcd:3.4.3-0
docker image rm mirrorgcrio/coredns:1.6.7

注意,至此基础的组件都安装完成,接下来要根据是master节点还是普通node节点来分别配置。

2.8 master节点配置

(1)在master节点上运行:

kubeadm init --pod-network-cidr=172.0.0.0/16 --kubernetes-version=v1.18.3 --service-cidr=172.17.0.0/16 --ignore-preflight-errors=Swap --apiserver-advertise-address=172.17.0.2

注释:

  • --kubernetes-version=v1.18.3:指定K8S版本,必须和前面导入的镜像一致
  • --pod-network-cidr=171.0.0.0/16:表示集群将使用网络的子网范围; 
  • --service-cidr:指定service网段
  • --ignore-preflight-errors=Swap/all:忽略 swap/所有 报错
  • --apiserver-advertise-address:表示绑定的网卡IP

若执行kubeadm init出错或强制终止,则再需要执行该命令时,需要先执行kubeadm reset重置。

(2)初始化命令成功后,创建.kube目录

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

(3)此外最后还会提示其他节点加入集群时的命令:

kubeadm join 172.17.0.2:6443 --token zuhiop.bmxq2jofv1j68o9o --discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb

需要注意的是这里的token值24小时后会失效,因此,当以后还想加入节点时,可以先用kubeadm token list命令查看当前的token表,并在master节点上执行

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'    # 来查看hash。

查看网络状态kubectl get pod -n kube-system,可以发现都处于Pending阻塞状态,此时,我们需要配置网络,直接使用Calico,即执行:

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

(注意这里也是有版本号的,如果不是很清楚是多少,可以直接访问官网获取最新的进行尝试:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)

过段时间,再执行kubectl get pod -n kube-system就会发现都处于running状态了。

最后将master设为工作节点:

kubectl taint nodes --all node-role.kubernetes.io/master-

执行成功时会显示

node/xl-virtualbox untainted

对于mater至此配置成功,可以使用kubectl get nodes命令查看节点状态。当然目前只有一个master节点。

2.9 master节点验证

(1)拉取了必须的镜像

(2)开启了kube-apiserver 的6443端口

[root@master ~]# ss -nutlp
tcp LISTEN 0 128 :::6443 :::* users:(("kube-apiserver",pid=1609,fd=3))

(3)使用kubectl命令查询集群信息

查询组件状态信息

[root@master ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}

查询集群节点信息(因为还没有部署好flannel,所以节点显示为NotReady)

[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 13m v1.18.3

查询名称空间,默认

[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 13m
kube-public Active 13m
kube-system Active 13m

3.0 部署网络插件flannel

(1)直接使用kubectl 执行gitlab上的flannel 部署文件

[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created

(2)会看到下载好的flannel 的镜像

[root@master ~]# docker image ls |grep flannel
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 12 months ago 44.6 MB
quay.io/coreos/flannel v0.9.1 2b736d06ca4c 14 months ago 51.3 MB

(3)验证

① master 节点已经Ready

[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 14m v1.18.3

② 查询kube-system名称空间下

[root@master ~]# kubectl get pods -n kube-system(指定名称空间) |grep flannel
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-amd64-4wck2 1/1 Running 0 1m

3、初始化kubernetes node节点

3.1 使用kubeadm join 初始化

初始化node节点;下边的命令是master初始化完成后,下边有提示的操作命令

kubeadm join 172.17.0.2:6443 --token zuhiop.bmxq2jofv1j68o9o --discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb --ignore-preflight-errors=Swap

如果此时在master节点上使用kubectl get nodes查看节点的状态时'NotReady',请在对应主机上重启docker服务即可:

systemctl restart docker

3.2 验证集群是否初始化成功

注意:
为了每台节点显示名称不一样,最好是给每个节点设置不同的hostname,可以通过以下命令修改:

hostnamectl set-hostname new-name

文章参考:http://www.cnblogs.com/along21/

kubernetes系列—Ubuntu下搭建Kubernetes集群--k8s部署的更多相关文章

  1. Linux下搭建tomcat集群全记录(转)

    本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...

  2. Windows下搭建Redis集群

    Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Redis是单线程处理的,多核CPU也只能使用一个核, 所以部署在同一台电脑上,通过运行多个Redis实例组成集群,然后能提高CPU的利用 ...

  3. Redis集群搭建(转自一菲聪天的“Windows下搭建Redis集群”)

    配置Redis参考:http://blog.csdn.net/zsg88/article/details/73715947 使用Ruby配置集群参考:https://www.cnblogs.com/t ...

  4. Windows下 搭建redis集群

    Windows下搭建redis集群教程 一,redis集群介绍 Redis cluster(redis集群)是在版本3.0后才支持的架构,和其他集群一样,都是为了解决单台服务器不够用的情况,也防止了主 ...

  5. windows环境下搭建Redis集群

    转载请注明出处,原文章地址: https://www.cnblogs.com/tommy-huang/p/6240083.html Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Red ...

  6. Linux下搭建tomcat集群全记录

    (转) Linux下搭建tomcat集群全记录 2011-10-12 10:23 6133人阅读 评论(1) 收藏 举报 tomcatlinuxapacheinterceptorsession集群 1 ...

  7. mongo 3.4分片集群系列之四:搭建分片集群--哈希分片 + 安全 + 区域

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  8. mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  9. Windows下搭建REDIS集群

    Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Redis是单线程处理的,多核CPU也只能使用一个核, 所以部署在同一台电脑上,通过运行多个Redis实例组成集群,然后能提高CPU的利用 ...

  10. 不同云服务器下,ubuntu下开k3s集群

    首先先感谢老哥的文章:h构建多云环境下的K3S集群,但是我尝试在centos 8.2上面前面一直执行报错 并且安装glibc 2.17时还会报错make版本太低,所以直接放弃centos,投入ubun ...

随机推荐

  1. ider git Reset Type 使用记录

    Soft:在选定提交点之后所做的所有更改都将被暂存(这意味着可以到 Version Control 窗口(Alt+9)的Local Changes 选项卡,以便您可以查看它们,并在必要时稍后提交). ...

  2. 查看linux 用户

    sudo cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1}' ...

  3. vue请求插件axios响应拦截302

    axios.interceptors.response.use(function (response) { return response;}, function (error) { // 对请求错误 ...

  4. python学习:窗口程序

    https://www.cnblogs.com/zyg123/p/10385456.html # 导入tkinter模块 import tkinter # 创建画布需要的库 from matplotl ...

  5. CART回归树算法

    [题目1] 表1为拖欠贷款人员训练样本数据集,使用CART算法基于该表数据构造决策树模型,并使用表2中测试样本集确定剪枝后的最优子树. 表1 拖欠贷款人员训练样本数据集 编号 房产状况 婚姻情况 年收 ...

  6. windows环境下部署项目

    有些时候,我们的项目不得不用windows服务器部署,但是需要注意的是,windows服务是无法开启多进程处理请求的. 本文介绍如何在windows上部署flask项目,应用 apache + mod ...

  7. fiddler设置自动响应

    使用fiddler 设置AutoResponder 1.auto responder:自动响应器,设置并开启后将把请求接口拦截并返回 2.enable rules:开启规则,开启后规则启用 3.unm ...

  8. 怎么理解超几何分布概率公式:p=C(M,k)C(N-M,n-k)/C(N,n)

    怎么理解超几何分布概率公式:p=C(M,k)C(N-M,n-k)/C(N,n) 前言:重在记录,可能出错. 超几何分布概率公式:p=C(M,k)C(N-M,n-k)/C(N,n),也就是: 到底要怎么 ...

  9. git - git常用操作命令

    1.创建一个空的仓库 git init 2.配置git仓库 配置姓名 git config --global user.name '张三' 配置邮箱 git config --global user. ...

  10. nuxt项目中使用store

    首先初始化创建一个nuxt项目 nuxt项目创建以后,内部已自动集成store,所以无需再单独安装和引入 在根目录的store文件夹下新建文件,例如home.js //home.js export c ...