Flannel学习笔记
Flannel是一个老牌的容器网络插件,支持CNI规范,不支持网络策略。
Flannel会在每个节点上运行一个守护进程flanneld,这个守护进程负责从一个大的地址空间(K8S Pod CIDR)分配子网给节点。Flannel支持使用K8S API,或者直接使用etcd来存储网络配置、分配的子网信息、其它任何辅助数据(例如节点…
阅读全文通过自定义资源扩展Kubernetes
Kubernetes是高度可配置、可扩展的,通常你不需要Fork其主项目代码或者打补丁。
对K8S的定制基本上可以分为两种方式:
- 配置,例如修改命令行参数、本地配置、API资源
- 扩展,在集群内外运行额外的程序或服务
本文主要讨论如何扩展K8S
扩展…
阅读全文基于Helm的Kubernetes资源管理
Helm是Kubernetes的包管理器,由客户端组件helm和服务端组件Tiller组成。Helm能够将一组K8S资源打包统一管理。
到官网下载Helm后解压,可以得到helm客户端二进制文件。然后执行下面的命令,在集群中安装Tiller:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 自动使用kubectl config current-context这个上下文对应的K8S集群 # 安装或者重新安装Tiller helm init # 国内访问,指定仓库镜像 helm init --stable-repo-url http://mirror.azure.cn/kubernetes/charts # 微软也提供了孵化器仓库的镜像 https://mirror.azure.cn/kubernetes/charts-incubator # 如果向安装到其它K8S集群 helm init --kube-context ctx-name # 如果想升级Tiller helm init --upgrade helm init --node-selectors "beta.kubernetes.io/os"="linux" # 指定在何种Node上运行Tiller --service-account tiller # 指定使用的SA,需要cluster-admin权限 # 为Helm使用的SA添加权限 kubectl create clusterrolebinding kube-system-tiller-crb --clusterrole=cluster-admin --serviceaccount=kube-system:tiller |
Helm会在K8S集群中创建一个Deployment,其Pod使用镜像g…
阅读全文Kubernetes集群部署记录
本文记录在五台Ubuntu 16.04上,搭建Kubernetes 1.12高可用集群 + IPVS集群网络的完整步骤。
1 2 3 4 5 6 7 8 9 10 |
[k8s] boron.gmem.cc carbon.gmem.cc radon.gmem.cc neon.gmem.cc xenon.gmem.cc [k8s-no-master] boron.gmem.cc carbon.gmem.cc |
采用自签名证书:
1 2 3 |
openssl genrsa -out ca.key 2048 openssl req -x509 -newkey rsa:2048 -keyout ca.key -out ca.crt -days 3650 \ -subj "/C=CN/ST=BeiJing/L=BeiJing/O=Gmem Studio/OU=IT Support/CN=Gmem SHA256 CA" |
拷贝到Ansible主节点:
分发到所有节点:
下载地址:https://github.com/etcd-io/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz
解压到/opt/etcd目录。
本集群采用完全的TLS连接,需要为每个节点准备数字证书。
节点Xenon:
节点…
阅读全文为裸金属K8S集群提供外部负载均衡器
在裸金属上(这里是相对云上环境来说,不是说无操作系统)部署的Kubernetes集群,是无法使用LoadBalancer类型的Service的,因为Kubernetes本身没有提供针对裸金属集群的负载均衡器。Kubernetes仅仅提供了针对部分IaaS平…
阅读全文Kata Containers学习笔记
Kata Containers是基于Intel Clear Container + Hyper runV实现的轻量级的虚拟机,能够无缝的集成到容器生态系统中。Kata和Container一样轻量、快速,同时具有传统虚拟化的安全优势,Kata和Docke…
阅读全文Kubernetes上和DNS相关的问题
这是一篇译文,原文地址:Racy conntrack and DNS lookup timeouts
最近出现了很多关于K8S中DNS查找超时的BUG报告,某些情况下Pod发起的DNS查找耗时高达5s甚至更久。在这篇文章中我将解释DNS查找延迟的根本原因,讨论缓和此延迟的途径,以及如何修改内核解决此问题。
在K8S中,Pod访问D…
阅读全文Kuberentes客户端编程
1 2 3 4 5 6 7 8 9 |
import ( "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/kubernetes" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/api/errors" ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
var ( masterURL string kubeConfig string ) func main() { flag.StringVar(&masterURL, "master-url", "", "URL of kubernetes master") flag.StringVar(&kubeConfig, "kube-config", "", "Kubernetes configuration file location") flag.Parse() // 构建配置信息 cfg, err := clientcmd.BuildConfigFromFlags(masterURL, kubeConfig) if err != nil { log.Fatalf("Invalid arguments: %s", err.Error()) } // 创建API集 clientset, err := kubernetes.NewForConfig(cfg) if err != nil { log.Fatalf("Failed to connect to api server: %s", err.Error()) } } |
在Pod中访问API Server,可以使用集群授予的ServiceAccount作为凭证。参考如下代码:
通过标签选择器列出:
可以持续监控目标资源的变化:
下面是修改Deployment环境变量定义的例子:
下面代码片断示意了如何创建一个完整的Deployment对象:
动态客户端的CRU…
阅读全文