官方文档: 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. VScode+Sublime安装与汉化

    两大常用编辑器安装与汉化 想敲代码?工欲善其事,必先利其器,先安装编写代码所需要的工具吧.本期的主角是VScode与Sublime,这是两款比较热门的代码编辑器. 目录: VScode安装与汉化 Su ...

  2. JS笔记(二)

    1.完整的JavaScript由核心(ECMAScipt).文档对象模型(DOM).浏览器对象模型(BOM)组成. 2.<script>标签的用法:引用位置.src.async.defer ...

  3. Laravel 队列功能 简单应用

    生成任务类 默认情况下,应用程序的所有可排队任务都存储在 app/Jobs 目录下.如果 app/Jobs 目录不存在,则会在运行 make:job Artisan 命令时将创建它.你可以使用 Art ...

  4. hdu4403暴力搜索

    题意:      给你一个数字串,让你在里面添加一个=和若干个+,使等式成立. 思路:      lmax最大是15,直接暴搜,无压力,关键是判重,要在答案的时候判重,一开始在进队列之前判的,各种wa ...

  5. hdu4530 水题

    题意: 小Q系列故事--大笨钟 Time Limit: 600/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...

  6. POJ1703带权并查集(距离或者异或)

    题意:       有两个黑社会帮派,有n个人,他们肯定属于两个帮派中的一个,然后有两种操作 1 D a b 给出a b 两个人不属于同一个帮派 2 A a b 问a b 两个人关系 输出 同一个帮派 ...

  7. Wordpress主题编辑器漏洞复现

    Wordpress是全球流行的博客网站,全球有上百万人使用它来搭建博客.他使用PHP脚本和Mysql数据库来搭建网站. 那么,如果当我们在渗透测试过程中获得到了别人Wordpress的账号和密码之后, ...

  8. Python 爬虫与HTTP协议简介

    爬虫的实际例子: 搜索引擎(百度.谷歌.360搜索等). 伯乐在线. 惠惠购物助手. 数据分析与研究(数据冰山知乎专栏). 抢票软件等. 什么是网络爬虫: 通俗理解:爬虫是一个模拟人类请求网站行为的程 ...

  9. Windows核心编程 第三章 内核对象

    第3章内核对象 在介绍Windows API的时候,首先要讲述内核对象以及它们的句柄.本章将要介绍一些比较抽象的概念,在此并不讨论某个特定内核对象的特性,相反只是介绍适用于所有内核对象的特性. 首先介 ...

  10. Intel汇编语言程序设计学习-第二章 IA-32处理器体系结构-下

    2.2  IA-32处理器体系结构 如前所述,IA-32是指始于Intel386直到当前最新的奔腾4的系列的处理器(额...这本书是什么时候写的啊,表示现在应该是I7啊),在IA-32的发展过程中,I ...