k8s全称kerbernets,docker集群的工具
安装k8s
首先得有docker环境,安装完之后继续下一步
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 -y install kubelet-1.17.0 kubeadm-1.17.0
以上操作,从机也要进行下载
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
启动docker与kubelet服务
每个机器设置一下hostname
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-slave01
hostnamectl set-hostname k8s-slave02
有便于后面的区分
k8s的核心思想
node pods deployment service
新建命令空间
新建namespce.yaml文件
apiVersion: v1
kind: Namespace
metadata:
name: work
deployment
搭建swagger-ui作演示
swagger-ui-deployment
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: swagger-ui
name: swagger-ui
namespace: work
spec:
selector:
matchLabels:
app: swagger-ui
replicas: 1
template:
metadata:
labels:
app: swagger-ui
spec:
containers:
- env:
image: swaggerapi/swagger-ui
name: swagger-ui
volumeMounts:
- mountPath: /usr/share/nginx/html/config
name: doc-volume
ports:
- containerPort: 8080
volumes:
- name: doc-volume
hostPath:
# directory location on host
path: /webwww/swagger
# this field is optional
type: Directory
service
以swagger作演示
swagger-ui-service.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: swagger-ui
name: swagger-ui
namespace: work
spec:
selector:
matchLabels:
app: swagger-ui
replicas: 1
template:
metadata:
labels:
app: swagger-ui
spec:
containers:
- env:
image: swaggerapi/swagger-ui
name: swagger-ui
volumeMounts:
- mountPath: /usr/share/nginx/html/config
name: doc-volume
ports:
- containerPort: 8080
volumes:
- name: doc-volume
hostPath:
# directory location on host
path: /webwww/swagger
# this field is optional
type: Directory
相关命令
查看work命令空间所有的pods
kubectl get pods -n work
查看相关节点
kubectl get nodes
制作pods集
kubectl create -f swagger-ui-deployment.yaml
查看指定pod相关信息
kubectl describe pods swagger-ui-c69f9f4cf-kbft9 -n work
查看指定pod详细信息
kubectl describe pods swagger-ui-c69f9f4cf-kbft9 -n work
制作service暴露外部
kubectl apply -f swagger-ui-service.yaml
删除指定的service
kubectl delete -f swagger-ui-service.yaml
查看有哪些service
kubectl get svc -n work
更新相关配置
kubectl replace -f nginx.yaml
进入指定pods
kubectl -n work exec -it gitlab-67f74459f4-qdqtf /bin/bash
注意点
Pod并非一个持久化的东西,很有可能突然挂了,并且没有能力自我修复,这就是为啥我们把它们和controller一起用,这样可以来控制pod的replica,容错,自我修复等等。比较有名的例子比如Deployments,ReplicaSets等。我们通过把Pod的定义(specification,也就是spec)附加到别的对象(也就是之前用的template.spec)来完成。
k8s会有两个默认Namespace:kube-system和default。kube-system一般会用来放一些Kubernetes系统的组件,default会用来放一些属于其它Namespace的对象。我们默认情况下是会连接到default命名空间。kube-public是一个特殊的namespace,可以被所有的用户读,一般用于特殊情况比如初始化一个集群。
Docker 启动时可以用 --publish/-p 参数配置端口映射规则,Pod 的定义设置容器的映射规则如:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: "nginx:1.11"
ports:
- name: web
containerPort: 80
protocol: TCP
hostIP: 0.0.0.0
hostPort: 80
name:设置端口名称,必须 Pod 内唯一,当只配置一个端口的时候,这是一个可选项,当配置多个端口的时候,这是一个必须项。
containerPort:必须项,设置在容器内的端口,有效范围 1 ~ 65535。
protocol:可选项,设置端口的协议,TCP 或者 UDP,默认是 TCP。
hostIP:可选项,是指在宿主机上的IP,默认绑定到所有可用的 IP 上,即 0.0.0.0 。
hostPort:可选项,设置在宿主机上的端口,如果设置则进行端口映射,有效范围 1 ~ 65535。
总结
总的来说相对复制,生产上使用必须要把核心理解清楚。
相关阅读
kubectl delete pod 后又创建了一个新的pod
1 node(s) had taints that the pod didn't tolerate.
有时候一个pod创建之后一直是pending,没有日志,也没有pull镜像,describe的时候发现里面有一句话: 1 node(s) had taints that the pod didn't tolerate.
直译意思是节点有了污点无法容忍,执行 kubectl get no -o yaml | grep taint -A 5 之后发现该节点是不可调度的。这是因为kubernetes出于安全考虑默认情况下无法在master节点上部署pod,于是用下面方法解决:
kubectl taint nodes --all node-role.kubernetes.io/master-
https://my.oschina.net/eima/blog/1860598
https://kubernetes.io/zh/docs/concepts/services-networking/connect-applications-service/