k8s二进制部署比较繁琐,一下内容 仅供 参考,错误地方请不吝评论
k8s组件介绍
核心概念
pod
- pod是k8s最小的部署单元
- 一个pod中可以有一个或者多个容器(一组容器的集合,即容器组)
- 一个pod中的容器共享网络命名空间
- pod是短暂的
controllers:控制器,用来控制pod,启动、停止、删除
- ReplicaSet:确保预期的pod副本数量
- Deployment:无状态应用部署(用的多)
- StatefulSet:有状态应用部署
- DaemonSet:确保所有Node运行同一个Pod
- Job:一次性任务
- Cronjob:定时任务
Service:服务
将一组pod关联起来,提供一个统一的入口,即使pod的网络地址发生改变,这个统一入口也不会改变
- 防止pod失联
- 定义一组pod的访问策略
Label:标签
一组pod有一个统一的标签,service通过标签和一组pod进行关联
NameSpace:命名空间
用来隔离pod的运行环境【默认情况下,pod是可以互相访问的】
使用场景:
- 为不同的公司提供隔离的pod运行环境
- 为开发环境、测试环境、生产环境分别准备不同的名称空间,进行隔离
Kubernetes里的3种IP
- Node IP:Node的ip地址。Node IP是Kubernetes集群中每个节点的物理网卡的IP地址,是一个真实存在的物理网络,所有属于这个网络的服务器都能通过这个网络直接通信,不管其中是否有部分节点不属于这个Kubernetes集群。这也表明在Kubernetes集群之外的节点访问Kubernetes集群之内的某个节点或者TCP/IP服务时,都必须通过NodeIP通信。
- Pod IP:Pod的ip地址。Pod IP是每个Pod的IP地址,它是Docker Engine根据docker0网桥的IP地址段进行分配的,通常是一个虚拟的二层网络,前面说过,Kubernetes要求位于不同Node上的Pod都能够彼此直接通信,所以Kubernetes里一个Pod里的容器访问另外一个Pod里的容器时,就是通过Pod IP所在的虚拟二层网络进行通信的,而真实的TCP/IP流量是通过Node IP所在的物理网卡流出的。
- Cluster IP:Service的ip地址。Cluster IP仅仅作用于Kubernetes Service这个对象,并由Kubernetes管理和分配IP地址;Cluster IP无法被Ping,因为没有一个“实体网络对象”来响应;Cluster IP只能结合Service Port组成一个具体的通信端口,单独的Cluster IP不具备TCP/IP通信的基础,并且它们属于Kubernetes集群这样一个封闭的空间,集群外的节点如果要访问这个通信端口,则需要做一些额外的工作。
etcd 部署
安装cfssl
cd /opt/
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
chmod +x /usr/local/bin/cfssl*
生成ca证书:
mkdir /opt/certs && cd /opt/certs
#生成csr.json
cat >> ca-csr.json << eof
{
"CN": "k8s-CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
eof
生成ca证书
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
生成ca-config.json
cat >> ca-config.json <<eof
{
"signing": {
"default": {
"expiry": "175200h"
},
"profiles": {
"server": {
"expiry": "175200h",
"usages": [
"signing",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "175200h",
"usages": [
"signing",
"key encipherment",
"client auth"
]
},
"peer": {
"expiry": "175200h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
eof