官方文档: 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. 02- linux目录和文件的基础操作

    本博文纲要 linux目录结构 绝对路径与相对路径 linux目录常用操作 linux文件常用操作 Q/A Windows文件系统特点 -文件系统是操作系统的一个功能,用户管理目录和文件 -Windo ...

  2. hdu4122 制作月饼完成订单的最小花费

    题意:       有一个加工厂加工月饼的,这个工厂一共开业m小时,2000年1月1日0点是开业的第一个小时,每个小时加工月饼的价钱也不一样,然后每个月饼的保质期都是t天,因为要放在冰箱里保存,所以在 ...

  3. hdu1074 状态压缩dp+记录方案

    题意:       给你一些作业,每个作业有自己的结束时间和花费时间,如果超过结束时间完成,一天扣一分,问你把n个作业完成最少的扣分,要求输出方案. 思路:       状态压缩dp,记录方案数的地方 ...

  4. Python脚本自动化破解大白鲨摄像头(Shodan)

    关于本文的技术知识点,Shodan模块的用法,传送门-->  Python中shadon模块的使用    Shodan的使用 今天我们要利用python进行自动化破解的摄像头叫大白鲨摄像头,他的 ...

  5. 19.Vuex详细使用说明-一篇文章涵盖所有知识点

    vuex官网: https://vuex.vuejs.org/zh/ 一. 前言 不管是Vue,还是 React,都需要管理状态(state),比如组件之间都有共享状态的需要. 什么是共享状态? 比如 ...

  6. <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  7. unity怎么把工程打包成unitypackage文件

    unity怎么把工程打包成unitypackage文件 想探讨问题的原因 上课的时候,看到老师的磁盘都要爆满了,主要的原因是同学们提交的2DGameKit,工程文件太大了. 文件没有压缩,占用空间是2 ...

  8. 第六部分 数据搜索之使用HBASE的API实现条件查询

    题目 使用HADOOP的MAPReduce,实现以下功能: (1)基于大数据计算技术的条件查询:使用mapreduce框架,实现类似Hbase六个字段查询的功能 (2)时段流量统计:以hh:mm:ss ...

  9. android之Parcelable

    java编程中,为了将对象的状态保存,需要将对象序列化. 在android中,序列化有两种方法可供选择,一个是java自带的序列化方法,只需实现Serializeable接口即可:另一个是androi ...

  10. IT培训软件测试怎么样,问问“过来人”!

    经常看到有人在网上发帖子问:"XX培训(IT培训机构)怎么样,学过的老哥可以出来讲讲真话吗?"问这种问题的同学,来,站起来!我不得不在这儿说你两句:你要想知道一家IT培训机构到底怎 ...