官方文档: https://ubuntu.com/kubernetes/docs

搭建一个基本的集群

集群ip规划

hostname ip
ubuntu-1 10.0.0.10
juju-controller-1 10.0.0.11
juju-master-1 10.0.0.21
juju-master-2 10.0.0.22
juju-master-3 10.0.0.23
juju-worker-1 10.0.0.31
juju-worker-2 10.0.0.32

ubuntu-1 为juju客户端和haproxy机器

juju-controller-1为juju控制器节点(可以做高可用)

以下操作都是在ubuntu-1上执行

安装juju

sudo snap install juju --classic

设置云类型

juju add-cloud
输入manual

添加机器(一共5台)

juju bootstrap
juju add-machine ssh:root@x.x.x.x

机器添加完成后, juju machines 能看到机器id

生成安装core.yaml

https://jujucharms.com/new/画图,然后导出成yaml

这里是我的yaml

applications:
containerd:
charm: 'cs:~containers/containerd-102'
series: focal
annotations:
gui-x: '475'
gui-y: '800'
easyrsa:
charm: 'cs:~containers/easyrsa-345'
num_units: 1
series: focal
annotations:
gui-x: '90'
gui-y: '420'
to:
- '0'
etcd:
charm: 'cs:~containers/etcd-553'
num_units: 3
options:
channel: 3.4/stable
series: focal
annotations:
gui-x: '800'
gui-y: '420'
to:
- '0'
- '1'
- '2'
flannel:
charm: 'cs:~containers/flannel-518'
options:
cidr: 10.24.0.0/16
series: focal
annotations:
gui-x: '475'
gui-y: '605'
kubernetes-master:
charm: 'cs:~containers/kubernetes-master-955'
num_units: 3
options:
enable-dashboard-addons: false
proxy-extra-args: proxy-mode=ipvs
service-cidr: 10.153.183.0/24
series: focal
annotations:
gui-x: '800'
gui-y: '850'
to:
- '0'
- '1'
- '2'
kubernetes-worker:
charm: 'cs:~containers/kubernetes-worker-726'
num_units: 2
options:
proxy-extra-args: proxy-mode=ipvs
expose: true
series: focal
annotations:
gui-x: '90'
gui-y: '850'
to:
- '3'
- '4'
relations:
- - 'kubernetes-master:kube-api-endpoint'
- 'kubernetes-worker:kube-api-endpoint'
- - 'kubernetes-master:kube-control'
- 'kubernetes-worker:kube-control'
- - 'kubernetes-master:certificates'
- 'easyrsa:client'
- - 'etcd:certificates'
- 'easyrsa:client'
- - 'kubernetes-master:etcd'
- 'etcd:db'
- - 'kubernetes-worker:certificates'
- 'easyrsa:client'
- - 'flannel:etcd'
- 'etcd:db'
- - 'flannel:cni'
- 'kubernetes-master:cni'
- - 'flannel:cni'
- 'kubernetes-worker:cni'
- - 'containerd:containerd'
- 'kubernetes-worker:container-runtime'
- - 'containerd:containerd'
- 'kubernetes-master:container-runtime'
machines:
'0': {}
'1': {}
'2': {}
'3': {}
'4': {}

根据yml来部署

juju deploy ./core.yaml --map-machines=existing,0=0,1=1,2=2,3=3,4=4

juju status 全部idle就算正常了

kata容器

部署

juju deploy cs:~containers/kata
juju add-relation kata kubernetes-master
juju add-relation kata kubernetes-worker
juju add-relation kata:untrusted containerd:untrusted

使用

部署的时候加上io.kubernetes.cri.untrusted-workload: "true"

apiVersion: v1
kind: Pod
metadata:
name: nginx-untrusted
annotations:
io.kubernetes.cri.untrusted-workload: "true"
spec:
containers:
- name: nginx
image: nginx

更换master节点

先删除节点

juju remove-unit etcd/1 --force --no-wait
juju remove-unit kubernetes-master/1 --force --no-wait
juju remove-machine 1 --force --no-wait

etcd集群删除这个member

https://ubuntu.com/kubernetes/docs/charm-etcd

需要先下载证书到本地(要解压)

juju run-action --wait etcd/0 package-client-credentials
juju scp etcd/0:etcd_credentials.tar.gz etcd_credentials.tar.gz

然后使用etcdctl删除节点

export ETCDCTL_KEY_FILE=$(pwd)/client.key
export ETCDCTL_CERT_FILE=$(pwd)/client.crt
export ETCDCTL_CA_FILE=$(pwd)/ca.crt
export ETCDCTL_ENDPOINT=https://10.0.0.21:2379
etcdctl member list etcdctl member remove c2499df1988d1925

增加节点

juju add-machine ssh:root@100.64.1.167
juju machines
记住节点ID,假如是9

扩容master到节点9

juju add-unit kubernetes-master --to 9

扩容etcd到节点9

juju add-unit etcd --to 9

执行kubectl命令

搭建haproxy负载均衡

haproxy配置文件

...省略

frontend http_ingress_traffic_fe
bind 0.0.0.0:80
mode tcp
default_backend http_ingress_traffic_be backend http_ingress_traffic_be
mode tcp
balance roundrobin
server juju-worker-1 10.0.0.31:80 check
server juju-worker-2 10.0.0.32:80 check frontend https_ingress_traffic_fe
bind 0.0.0.0:443
mode tcp
default_backend https_ingress_traffic_be backend https_ingress_traffic_be
mode tcp
balance roundrobin
server juju-worker-1 10.0.0.31:443 check
server juju-worker-2 10.0.0.32:443 check frontend k8s_api_fe
bind 0.0.0.0:6443
mode tcp
default_backend k8s_api_be backend k8s_api_be
mode tcp
balance roundrobin
server juju-master-1 10.0.0.21:6443 check
server juju-master-2 10.0.0.22:6443 check
server juju-master-3 10.0.0.23:6443 check

修改负载均衡的ip

juju config kubernetes-master loadbalancer-ips="10.0.0.10"

安装kubectl

sudo snap install kubectl --classic

获取新的kubeconfig配置文件

juju scp kubernetes-master/0:config ~/.kube/config

juju-controller高可用

增加新的controller节点

juju add-machine -m controller ssh:root@100.64.1.169

查看controller机器

juju machines -m controller

开启高可用

juju enable-ha --to 5,6

查看controller信息

juju controllers --refresh
juju controllers

使用ubuntu charmed kubernetes 部署一套生产环境的集群的更多相关文章

  1. 使用kubeadm部署一套高可用k8s集群

    使用kubeadm部署一套高可用k8s集群 有疑问的地方可以看官方文档 准备环境 我的机器如下, 系统为ubuntu20.04, kubernetes版本1.21.0 hostname IP 硬件配置 ...

  2. 京东云开发者|IoT运维 - 如何部署一套高可用K8S集群

    环境 准备工作 配置ansible(deploy 主机执行) # ssh-keygen # for i in 192.168.3.{21..28}; do ssh-copy-id -i ~/.ssh/ ...

  3. 单例模式在生产环境jedis集群中的应用

    背景:不久前单位上线一款应用,上了生产环境之后,没过多久,便吃掉了服务器所有的内存,最后导致网站服务挂了. 在解决了这一问题之后,我发现这其实是典型的一单例模式,现分享一下. 之前存在问题的老代码如下 ...

  4. Kubernetes笔记(一):十分钟部署一套K8s环境

    Kubernetes是Goole开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理 -- 百度百科. 接触K8s也有半年多了,也基于阿里云平台搭建了包含多级服务.目前运行较为稳定的 ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  7. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  8. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  9. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

随机推荐

  1. 仅用一句SQL更新整张表的涨跌幅、涨跌率

    问题场景 各大平台店铺的三项评分(物流.服务.商品)变化情况: 商品每日价格的变化记录: 股票的实时涨跌浮: 复现场景 表:主键ID,商品编号,记录时的时间,记录时的价格,创建时间. 问题:获取每个商 ...

  2. 分享几个网址二维码生成api

    分享几个网址二维码生成api 传入网址参数,或许二维码图片,扫二维码能直接跳转网址 http://b.bshare.cn/barCode?site=weixin&url=https://www ...

  3. linux删除文件空间不释放问题解决

    目录 场景描述 原因 解决方法 在线清空文件 场景描述 某天,收到Prometheus报警,生产中某台机器出现磁盘空间不足报警,该台服务器是mysql其中一台从库,远程登录到该服务后,排查磁盘空间的原 ...

  4. 【Nginx(二)】Nginx目录结构和常用的命令以及核心配置文件

    Nginx的目录结构: 默认的安装路径 : /usr/local/nginx 安装完成后,Nginx的目录结构如下: conf:   #所有配置文件的目录 nginx.conf  #默认的主要配置文件 ...

  5. PAT 乙级 -- 1011 -- A+B和C

    问题简述 给定区间[-231, 231]内的3个整数A.B和C,请判断A+B是否大于C. 输入格式: 输入第1行给出正整数T(<=10),是测试用例的个数.随后给出T组测试用例,每组占一行,顺序 ...

  6. 如何以最简单的方式安装 KALI 渗透测试框架系统

    0x01 第一步下载 KALI 百度搜索 KALI 官网,找到下载区,我选的是 64 位标准版,但是推荐下载 32 位(功能貌似更全) 这个为下载后的 iso 镜像文件 0x02 第二步打开虚拟机,配 ...

  7. Spring Cloud Alibaba(7)---docker-compose搭建nacos1.4.0集群

    docker-compose搭建nacos1.4.0集群 有关Nacos之前写过四篇文章. Spring Cloud Alibaba(3)---Nacos概述 Spring Cloud Alibaba ...

  8. SpringBoot程序后台运行

    使用nohup命令让进程后台运行 nohup java -jar 自己的springboot项目.jar >日志文件名.log 2>&1 & >日志文件名.log : ...

  9. JS求一个字符串在另一个字符串中出现的次数

    参数说明: subString子字符串 originString母字符串 isIgnoreCap是否忽略大小写,默认忽略 function stringFre(subString, originStr ...

  10. 上手 WebRTC DTLS 遇到很多 BUG?浅谈 DTLS Fragment

    上一篇<详解 WebRTC 传输安全机制:一文读懂 DTLS 协议>详细阐述了 DTLS.本文将结合 DTLS 开发中遇到的问题,详细解读 DTLS 的一些基础概念以及 Fragment ...