" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper 博主等级

千里之行,始于足下

  • 累计撰写 206 篇文章
  • 累计创建 14 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

快速配置K8S 单Master 和 高可用

PySuper
2020-07-03 / 0 评论 / 0 点赞 / 6 阅读 / 0 字
温馨提示:
本文最后更新于2024-05-28,若内容或图片失效,请留言反馈。 所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

这里交代一下当前使用的环境和Kubernetes的版本,另外使用的Kuboard的版本信息。

如果你和我的环境都是一样的,可以直接使用我这里的代码搭建K8S。

但是如果有差异,还是去https://kuboard.cn/看看吧。

你学习Kubernetes的时候可以使用这种方式,快速搭建K8S。

但是如果你是准备将Kubernetes在项目中运行,最好还是使用二进制的安装方式

后面我也会再使用二进制的文件,搭建一个完整的Kubernetes集群,并集群上面运行DjangoWeb的项目。

版本信息

  • CentOS 7.8
  • Docker 19.03.8
  • Kubernetes v1.18.x
    • calico 3.13.1
    • nginx-ingress 1.5.5

CentOS

总是使用Ubuntu和Debian来做Server/Desktop,这次突然用CentOS,对我来说还真是…有点新奇

没有apt-get,yum update就可以直接更新等等。

下面就来看看CentOS初始化需要做哪些操作吧:

网络配置

  • vi /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT=on  ==> ONBOOT=yes    -- 修改
service network restart    -- 重启network

yum update    -- 更新
yum install net-tools    -- 安装net-tools

修改静态IP

  1. vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static    -- 这里修改为 static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=6efa4e7b-8bae-4998-a044-e7bc127bac2d
DEVICE=ens33
ONBOOT=yes


IPADDR=111.111.111.151    -- 静态IP 
GATEWAY=111.111.111.2    -- 默认网关
NETMASK=255.255.255.0    -- 子网掩码
DNS1=111.111.111.2    -- DNS 配置
DNS2=8.8.8.8    -- 谷歌地址
NM_CONTROLLED=no
  1. vi /etc/resolv.conf
nameserver 111.111.111.2
nameserver 8.8.8.8
  1. vi /etc/sysconfig/network-scripts/route-ens33
192.168.247.0 via 192.168.247.2
0.0.0.0 via 192.168.247.2
  1. vi /etc/sysconfig/static-routes
any net 192.168.247.0 netmask 255.255.255.0 gw 192.168.247.2
any net 0.0.0.0 netmask 0.0.0.0 gw 192.168.247.2
  1. service network restart

Kubernetes单节点

安装docker及kubelet

-- 在 master 节点和 worker 节点都要执行
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
curl -sSL https://kuboard.cn/install-script/v1.18.x/install_kubelet.sh | sh -s 1.18.4

初始化master节点

只在 master 节点执行
export MASTER_IP=111.111.111.151
export APISERVER_NAME=apiserver.demo
export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.18.x/init_master.sh | sh -s 1.18.4

-- 检查 master 初始化结果
watch kubectl get pod -n kube-system -o wide
kubectl get nodes -o wide

初始化worker节点

  • 在master节点执行
-- 这里返回的是加入K8S集群的命令
kubeadm token create --print-join-command
  • 只在 worker 节点执行
export MASTER_IP=111.111.111.151
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts

-  在worker节点上执行,加入K8S集群的命令

检查初始化结果

kubectl get nodes -o wide

安装 Ingress Controller

-- 只在 master 节点执行
kubectl apply -f https://kuboard.cn/install-script/v1.18.x/nginx-ingress.yaml

Kubernetes高可用

初始化master-1节点

  • 在 master 节点和 worker 节点都要执行
curl -sSL https://kuboard.cn/install-script/v1.16.2/install_kubelet.sh | sh
  • 只在第一个 master 节点执行
export APISERVER_NAME=apiserver.demo    -- 替换 apiserver.demo 为 您想要的 dnsName
export POD_SUBNET=10.100.0.1/16
echo "127.0.0.1    ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.16.2/init_master.sh | sh
  • 运行输出:
    • 第一个kubeadm join apiserver.k8s:6443 --token...复制到master节点上运行
    • 第二个kubeadm join apiserver.k8s:6443 --token...复制到worker节点上运行

检查master初始化结果

-- 只在第一个 master 节点执行

-- 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide

-- 查看 master 节点初始化结果
kubectl get nodes

初始化master-2、master-3

  • 只在第二、三个 master 节点 demo-master-b-1 和 demo-master-b-2 执行
export APISERVER_IP=x.x.x.x
export APISERVER_NAME=apiserver.demo
echo "${APISERVER_IP}    ${APISERVER_NAME}" >> /etc/hosts
  • 加入集群
-- 使用master-1上输出的join命令
kubeadm join apiserver.demo:6443 --token ...

-- 在master-1上检查结果
kubectl get nodes

初始化worker节点

-- 只在 worker 节点执行
export MASTER_IP=x.x.x.x
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
-- 使用master-1上输出的join命令
kubeadm join apiserver.demo:6443 --token ...

-- 在master-1上检查结果
kubectl get nodes

移除 worker 节点

在准备移除的 worker 节点上执行:kubeadm reset

在第一个 master-1上执行:kubectl delete node worker_name

安装Ingress Controller

-- 只在第一个 master 节点 demo-master-a-1 上执行
kubectl apply -f https://kuboard.cn/install-script/v1.16.2/nginx-ingress.yaml

Load Balbancer

vi demo1.deploy.yml

apiVersion: v1
kind: Service
metadata:
  name: demo1
  namespace: default
  labels:
    app: demo1
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: http
      protocol: TCP
      name: http
  selector:
    app: demo1

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo1-deployment
  namespace: default
  labels:
    app: demo1
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demo1
  template:
    metadata:
      labels:
        app: demo1
    spec:
      containers:
      - name: demo1
        image: mritd/demo
        ports:
          - name: http
            containerPort: 80
            protocol: TCP
-- 部署
kubectl apply -f demo1.deploy.yml
-- 查看
kubectl  get svc,pod -n default

Kuboard

kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.6/metrics-server.yaml
kubectl get pods -l k8s.kuboard.cn/name=kuboard -n kube-system
-- 获取token
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
docker
docker
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区