在线学习环境 交互式学习环境
Kubernetes狐狸教程 kubernetes官方教程 Katacoda - Interactive Learning Platform for Software Engineers 精选项目课程_IT热门课程_蓝桥云课课程 - 蓝桥云课 腾讯云实验平台 阿里云全球培训中心 Educative: Interactive Courses for Software Developers
Kubernetes狐狸教程 vnc 浏览器打开失败解决方法 安装其他Debian浏览器
Copy apt-get update
# 火狐浏览器
apt-get install iceweasel
# goole浏览器
apt-get install google-chrome-stable
学习札记
参考资料
Kubernetes概述:Pods、Nodes、Containers和Clusters - DockOne.io
十分钟带你理解Kubernetes核心概念 - DockOne.io
第一次部署Kubernetes - DockOne.io
kubernetes Setup
Install and Set Up kubectl
kubernetes-sigs/kind
bsycorp/kind
Kubernetes(k8s)中文文档 目录_Kubernetes中文社区
Kubernetes(K8S)中文文档_Kubernetes中文社区
Kubernetes Handbook - Kubernetes中文指南/云原生应用架构实践手册 by Jimmy Song(宋净超)
部署kubernetes
MAC 上启用k8s docker desktop上启用kubernetes
docker 启用k8s 国内网路问题解决:https://github.com/AliyunContainerService/k8s-for-docker-desktop
笔记
Overview of kubectl
pod 在Pod中的任何容器都共享了容器命名空间以及本地网络。因此在Pod的容器直接可以非常方便的进行通讯,就好像它们是运行在同一个机器上一样,同时彼此之间又保持隔离。
Pod中可以包含多个容器,但是你还是应该尽可能的限制一下。因为Pod是作为一个最小单元,整体进行伸缩。这可能导致资源的浪费以及更多的费用开销。为了避免这种问题。Pod应该尽可能的保持"小",通常指应该包含一个主进程,以及与其紧密合作的辅助容器(这些辅助容器通常被称为Sidecar)。 http://dockone.io/article/3050
services 如果Pods是短暂的,那么重启时IP地址可能会改变,怎么才能从前端容器正确可靠地指向后台容器呢?
Service是定义一系列Pod以及访问这些Pod的策略的一层抽象。Service通过Label找到Pod组。因为Service是抽象的,所以在图表里通常看不到它们的存在,这也就让这一概念更难以理解。
学习
Using kubectl to Create a Deployment 学习 Kubernetes 基础知识
Play with Kubernetes Kubernetes Playground | Katacoda
学习环境部署
Copy # 运行kind https://github.com/bsycorp/kind
docker run --name kind -itd --privileged -p 8443:8443 -p 10080:10080 bsycorp/kind:latest-1.13
#进入
docker exec -it kind /bin/bash
# 这个kind是alpine 的Linux,因此不太一样
# 容器内安装bash complete
# https://www.oschina.net/translate/alpine-linux-install-bash-using-apk-command
apk add bash-completion
echo 'source /etc/profile.d/bash_completion.sh' >> ~/.bashrc
#安装提示 https://kubernetes.io/docs/tasks/tools/install-kubectl/#optional-kubectl-configurations
echo 'source <(kubectl completion bash)' >> ~/.bashrc
Copy kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp --port=8080
pod 的yml配置
Copy apiVersion : v1
kind : Pod
metadata :
name : gitea-pod
spec :
containers :
- name : gitea-container
image : gitea/gitea:1.4
service 的json
Copy {
"apiVersion" : "v1" ,
"kind" : "Service" ,
"metadata" : {
"name" : "my-service"
} ,
"spec" : {
"selector" : {
"app" : "MyApp"
} ,
"ports" : [
{
"protocol" : "TCP" ,
"port" : 80 ,
"targetPort" : 9376
}
]
}
}
playground 搭建
单节点的环境安装
https://github.com/bsycorp/kind
使用这个kind可以做到一键安装kubenetes环境 非常简单。
docker run -it --privileged -p 8443:8443 -p 10080:10080 bsycorp/kind:latest-1.12
多节点的环境安装
S1:
安装一个 基于Centos的docker环境,即 docker in docker
Copy #借助这个基于centos的dind镜像来开发
docker run --privileged --name kube-playground -itd cubedhost/centos7-dind-node
docker exec -it kube-playground bash
以下均为容器内的操作
准备: 如果系统默认没有命令补全提示,则需要安装
Copy #yum install epel-release
yum install bash-completion
# 安装docker completion
curl -XGET https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker > /etc/bash_completion.d/docker
S2: 安装go
Copy #这是国内安装源 https://golang.google.cn/dl/
curl -O https://dl.google.com/go/go1.11.9.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.11.1.linux-amd64.tar.gz
#gopath是go的工作目录,下载的程序都会在这里
mkdir -p ~/go ; echo "export GOPATH=$HOME/go" >> ~/.bashrc
# gopath目录中的bin目录是安装的程序的可执行文件
echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc
S3: 安装kind
https://github.com/kubernetes-sigs/kind
kind是一个多节点的docker in docker的kubernetes服务集群部署工具
kind使用go安装,但是默认的安装方式go get -u sigs.k8s.io/kind
所使用的域名 sigs.k8s.io在国内是无法访问的,
但是其实这个域名是会转到github的,因此可以通过手动从github下载后将目录地址换成sigs.k8s.io。
ps. go下载的文件会存放在$GOPATH/src中,本地已经存在时,go get会直接使用本地的文件。 https://www.cnblogs.com/52php/p/6434771.html
Copy cd $GOPATH /src
git clone https://github.com/kubernetes-sigs/kind.git
mkdir sigs.k8s.io
mv kind sigs.k8s.io/kind
# 这里go get命令不要加-u参数了,这个参数会联网去检查。
go get sigs.k8s.io/kind
S4: 安装kubectl
https://kubernetes.io/docs/tasks/tools/install-kubectl/
官方文档中的安装方式国内无法访问,因此参考这个:
阿里云 kubernetes yum 镜像仓库 CentOS
~~kubectl安装(1.9版本)(解决国内安装kubectl失败) ~~
Copy cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum info kubectl
yum install kubectl
#安装补全提示 https://kubernetes.io/docs/tasks/tools/install-kubectl/#optional-kubectl-configurations
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
# 因为尚未配置集群所以执行version会看到链接失败提示
kubectl version
S4: 使用kind
Copy # 安装补全提示
echo 'source <(kind completion bash)' >> ~/.bashrc
source ~/.bashrc
#创建集群
kind create cluster
#导出集群配置
export KUBECONFIG = "$( kind get kubeconfig-path )"
kubectl cluster-info
# check集群
kubectl version
以上就安装好了
开始游戏
bootcamp Interactive Tutorial - Deploying an App
Copy kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v2 --port=8080
kubectl describe pods kubernetes-bootcamp
kubectl proxy &
export POD_NAME = $( kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' )
echo Name of the Pod: $POD_NAME
curl http://localhost:8001/api/v1/namespaces/default/pods/ $POD_NAME /proxy/
kubectl logs $POD_NAME
多节点配置
kind multi-node clusters
示例配置
Copy # three node (two workers) cluster config
kind : Cluster
apiVersion : kind.sigs.k8s.io/v1alpha3
nodes :
- role : control-plane
- role : worker
- role : worker
Copy cat << EOF > multi-kind.yml
kind: Cluster
apiVersion: kind.sigs.k8s.io/v1alpha3
nodes:
- role: control-plane
- role: worker
- role: worker
EOF
kind create cluster --config=multi-kind.yml --name=multi-kind
export KUBECONFIG = "$( kind get kubeconfig-path --name=multi-kind )"
kubectl cluster-info
``