欢迎访问我的博客,你的支持,是我最大的动力!

从Docker到Kubernetes实践全接触(二)实践指南_安装配置

Docker 小马奔腾 6071℃ 评论
目录:
[显示]

Kubernetes实践指南

Kubernetes安装与配置

Master,至少2core和4GB内存
Node,至少4core和16GB内存
系统,CentOS7
Docker,1.12版本
etcd,3.0版本

关闭防火墙:systemctl disabled firewalld && systemctl stop friewalld
禁用SELinux:setenforce 0

使用kubeadm快速安装K8s集群

最简单的安装方法是yum install kubernetes,但仍需修改各组件的启动参数,才能完成k8s的集群配置
kubeadm还不能用于生产环境,但适合快速安装和学习k8s

文档:https://kubernetes.io/docs/setup/independent/install-kubeadm/
文档:https://www.cnblogs.com/liangDream/p/7358847.html

准备
CentOS7,2GB+RAM,2 CPUs+,网络连接,每个节点唯一主机名和MAC地址和UUID,端口未被占用,禁用swap
Product_uuid:cat /sys/class/dmi/id/product_uuid k8s依据该值确认集群中的

关闭防火墙和SELinux

systemctl disable firewalld && systemctl stop firewalld

安装Docker

支持docker1.11,1.12,1.13和17.03但是高于17.06官方还没有严格测试

cat /etc/yum.repos.d/docker.repo
包含版本1.7~1.13.1 17.01~17.05
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

#找到需要安装的docker版本
yum list|grep docker | sort -r
找到对应版本后,yum install 包名+版本号

yum install -y docker
systemctl enable docker && systemctl start docker

注,需要关闭selinux或启用docker命令添加--selinux-enabled=false

安装kubeadm/kubelet/kubectl

版本1.11

cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
yum install -y kubelet kubeadm kubectl
#yum install kubernetes-cni
#修改kubelet配置,否则kubelet启动会失败
#vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
#添加Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
systemctl enable kubelet && systemctl start kubelet

下载K8s相关镜像

kubeadm会自动下载K8s相关镜像且默认都是从gcr.io下载,所以需要使用镜像加速服务,镜像下载地址:https://hub.docker.com/r/warrior
下载后将镜像名改为以gcr.io/google_container开头,以供kubeadm使用

vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://lw9sjwma.mirror.aliyuncs.com"]
}
另外,还有OPTIONS='--registry-mirror=http://68e02ab9.m.daocloud.io'也可以
systemctl daemon-reload
systemctl restart docker

docker pull warrior/pause-amd64:3.0

拉取镜像过程,略

该方法安装的集群大部分组件工作在容器中,不推荐

以二进制包方式安装Kubernetes集群

版本1.6.13 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.6.md

K8s服务都可以通过直接运行二进制文件加上启动参数完成
Master节点部署:etcd、kube-apiserver、kube-controller-manager、kube-scheduler
Node节点部署:docker、kubelet、kube-proxy

master 192.168.10.130 k8s-master
node 192.168.10.150 k8s-node

vi /etc/hosts
192.168.10.130 k8s-master
192.168.10.150 k8s-node
vi /etc/hostname
k8s-master
vi /etc/selinux/config
SELINUX=disabled
systemctl disable firewalld
reboot now
yum install -y ntpdate
/usr/sbin/ntpdate cn.pool.ntp.org
#swapoff -a

Master 192.168.10.130
etcd服务 3.3.9

集群主数据库,安装k8s各服务前首先安装和启动

https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz

tar zxf etcd-v3.3.9-linux-amd64.tar.gz
cd etcd-v3.3.9-linux-amd64
mkdir -p /opt/kubernetes/etcd/bin
cp etcd /opt/kubernetes/etcd/bin
cp etcdctl /opt/kubernetes/etcd/bin
mkdir -p /opt/kubernetes/etcd/lib/
mkdir -p /opt/kubernetes/etcd/etc/
vi etcd.service

[Unit]
Description=Etcd Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/kubernetes/etcd/lib/
EnvironmentFile=-/opt/kubernetes/etcd/etc/etcd.conf
ExecStart=/opt/kubernetes/etcd/bin/etcd

[Install]
WantedBy=multi-user.target

cp etcd.service /usr/lib/systemd/system/
其中/opt/kubernetes/etcd/lib/是数据保存目录,etcd.conf通常不需要特别的参数设置,etcd默认监听127.0.0.1:2379和2380
启动服务
systemctl daemon-reload
systemctl start etcd
systemctl enable etcd
验证etcd是否正确启动
./etcdctl cluster-health

kube-apiserver服务 1.6.13

mkdir -p /opt/kubernetes/kube-apiserver/bin
tar zxf kubernetes-server-linux-amd64.tar.gz.tar
cd kubernetes/server/bin
cp kube-apiserver /opt/kubernetes/kube-apiserver/bin/
chmod +x kube-apiserver
mkdir -p /opt/kubernetes/kube-apiserver/etc
mkdir -p /opt/kubernetes/kube-apiserver/logs
vi kube-apiserver.service

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=etcd.service
Wants=etcd.service

[Service]
EnvironmentFile=/opt/kubernetes/kube-apiserver/etc/apiserver
ExecStart=/opt/kubernetes/kube-apiserver/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

cp kube-apiserver.service /usr/lib/systemd/system/
配置文件/opt/kubernetes/kube-apiserver/etc/apiserver中配置了KUBE_API_ARGS变量
vi apiserver
KUBE_API_ARGS="--storage-backend=etcd3 --etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535 --admission_control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota --logtostderr=false --log-dir=/opt/kubernetes/kube-apiserver/logs --v=2"

注意,若admission_control添加ResourceQuota,将不能创建资源
报错:Error from server (ServerTimeout): error when creating "mysql-rc.yaml": the server cannot complete the requested operation at this time, try again later (post replicationcontrollers)

启动服务
systemctl daemon-reload
systemctl start kube-apiserver
systemctl enable kube-apiserver
监听6443和8080两个端口
启动参数说明:
--etcd-servers,指定etcd服务的URL
--storage-backend,指定etcd版本,从k8s v1.6开始,默认为etcd3
--insecure-bind-address,绑定主机非安全IP地址
--insecure-port,绑定主机非安全端口,默认8080
--service-cluster-ip-range,k8s集群中,service虚拟IP地址段范围,CIDR格式,该IP范围不能与物理机真实IP段有重合
--service-node-port-range,k8s集群中,service可映射的物理机端口号范围,默认为30000~32767
--admission_control,k8s集群准入控制设置,各控制模块以插件形式依次生效
--logtostderr,设置为false表示将日志写入文件,不写入stderr
--log-dir,日志目录
--v,日志级别

kube-controller-manager服务 1.6.13

kube-controller-manager服务依赖于kube-apiserver

mkdir -p /opt/kubernetes/kube-controller-manager/bin
mkdir -p /opt/kubernetes/kube-controller-manager/etc
mkdir -p /opt/kubernetes/kube-controller-manager/logs
cp kube-controller-manager /opt/kubernetes/kube-controller-manager/bin/
vi kube-controller-manager.service

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=/opt/kubernetes/kube-controller-manager/etc/controller-manager
ExecStart=/opt/kubernetes/kube-controller-manager/bin/kube-controller-manager $KUBE_CONTROLLER_
MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

cp kube-controller-manager.service /usr/lib/systemd/system/
配置文件/opt/kubernetes/kube-controller-manager/etc/controller-manager包含kube-controller-manager全部的启动参数
vi controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--master=http://192.168.10.130:8080 --logtostderr=false --log-dir
=/opt/kubernetes/kube-controller-manager/logs --v=2"
启动服务
systemctl daemon-reload
systemctl start kube-controller-manager
systemctl enable kube-controller-manager
该服务开放端口10252
启动参数说明:
--master,指定apiserver的URL地址
--logtostderr,设置false表示日志写入文件,不写入stderr
--log-dir,日志目录
--v,日志级别

kube-scheduler服务 1.6.13

kube-scheduler服务依赖于kube-apiserver服务

mkdir -p /opt/kubernetes/kube-scheduler/bin
mkdir -p /opt/kubernetes/kube-scheduler/etc
mkdir -p /opt/kubernetes/kube-scheduler/logs
cp kube-scheduler /opt/kubernetes/kube-scheduler/bin/
vi kube-scheduler.service

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=/opt/kubernetes/kube-scheduler/etc/scheduler
ExecStart=/opt/kubernetes/kube-scheduler/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

cp kube-scheduler.service /usr/lib/systemd/system/
配置文件/opt/kubernetes/kube-scheduler/etc/scheduler包括了kube-scheduler的启动参数
vi scheduler
KUBE_SCHEDULER_ARGS="--master=http://192.168.10.130:8080 --logtostderr=false --log-dir=/opt/kubernetes/kube-scheduler/logs --v=2"
启动服务
systemctl daemon-reload
systemctl start kube-scheduler
systemctl enable kube-scheduler
该服务开放端口10251
启动参数说明:
--master,指定apiserver的URL地址
--logtostderr,设置false表示日志写入文件,不写入stderr
--log-dir,日志目录
--v,日志级别

Slave 192.168.10.150
Docker服务 1.13.1

yum install docker
systemctl start docker
systemctl enable docker

Docker国内加速

vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
重启服务
systemctl restart docker

kubelet服务 1.6.13

kubelet服务依赖于Docker服务

mkdir -p /opt/kubernetes/kubelet/bin
mkdir -p /opt/kubernetes/kubelet/lib
mkdir -p /opt/kubernetes/kubelet/etc
mkdir -p /opt/kubernetes/kubelet/logs
tar zxf kubernetes-node-linux-amd64.tar.gz.tar
cd kubernetes/node/bin/
cp kubelet /opt/kubernetes/kubelet/bin/
vi kubelet.service

[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/opt/kubernetes/kubelet/lib
EnvironmentFile=/opt/kubernetes/kubelet/etc/kubelet
ExecStart=/opt/kubernetes/kubelet/bin/kubelet $KUBELET_ARGS
Restart=on-failure

[Install]
WantedBy=multi-user.target

cp kubelet.service /usr/lib/systemd/system/
其中/opt/kubernetes/kubelet/lib是kubelet保存数据的目录,配置文件/opt/kubernetes/kubelet/etc/kubelet包括kubelet的启动参数
vi kubelet
KUBELET_ARGS="--api-servers=http://192.168.10.130:8080 --hostname-override=192.168.10.150 --logtostderr=false --log-dir=/opt/kubernetes/kubelet/logs --v=2"
启动服务
systemctl daemon-reload
systemctl start kubelet.service
systemctl enable kubelet.service
该服务开放端口 4194 10248 10250 10255
启动参数说明:
--api-servers,指定apiserver的URL,可以指定多个。已过时,新的是 --kubeconfig
--hostname-override,设置本Node名称
--logtostderr,设置false表示日志写入文件,不写入stderr
--log-dir,日志目录
--v,日志级别
问题解决:
1、error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
解决,添加kubelet启动参数添加--cgroup-driver=systemd 或者docker启动参数修改成--exec-opt native.cgroupdriver=cgroupfs,这里使用的是后者

kube-proxy服务 1.6.13

kube-proxy服务依赖于network服务

mkdir -p /opt/kubernetes/kube-proxy/bin
mkdir -p /opt/kubernetes/kube-proxy/etc
mkdir -p /opt/kubernetes/kube-proxy/logs
cp kube-proxy /opt/kubernetes/kube-proxy/bin
vi kube-proxy.service

[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubenetes
After=network.target
Requires=network.service

[Service]
EnvironmentFile=/opt/kubernetes/kube-proxy/etc/proxy
ExecStart=/opt/kubernetes/kube-proxy/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

cp kube-proxy.service /usr/lib/systemd/system/
配置文件/opt/kubernetes/kube-proxy/etc/proxy包含kube-proxy全部启动参数
vi proxy
KUBE_PROXY_ARGS="--master=http://192.168.10.130:8080 --proxy-mode iptables --logtostderr=false --log-dir=/opt/kubernetes/kube-proxy/logs --v=2"
启动服务
systemctl daemon-reload
systemctl start kube-proxy.service
systemctl enable kube-proxy.service
注意,kube-proxy需要后于kube-apiserver、docker和kubelet启动,否则会因连接不上apiserver而不会映射service的IP
若出现其他主机不能访问nodeport的情况,可以尝试iptables -P FORWARD ACCEPT
该服务开放端口 10249
启动参数说明:
--master,指定apiserver的URL地址
--logtostderr,设置false表示日志写入文件,不写入stderr
--log-dir,日志目录
--v,日志级别

测试

kubelet默认采用向master自动注册本Node的机制,在Master上查看Node状态

cp kubectl /usr/bin/
kubectl get nodes  #Ready即表示已成功注册且状态为可用
kubectl describe nodes

K8s集群安全设置

基于CA签名的双向数字证书认证方式

在安全的内网环境中,可以使用apiserver的非安全端口8080进行访问;
安全的方式:基于CA的双向数字证书认证、简单的基于HTTP BASE或者TOKEN的认证方式,其中CA的方式安全性最高

基于CA签名的双向数字证书生成步骤:
1)为kube-apiserver生成一个数字证书,并用CA证书进行签名
2)为kube-apiserver进程配置证书相关的启动参数,包括CA证书(用于验证客户端证书签名真伪)、自已的经过CA签名后的证书及私钥
3)为每个访问apiserver的客户端(kube-controller-manager、kube-scheduler、bubelet、kube-proxy及API Server客户端kubectl)生成自己的数字证书,也都用CA证书进行签名,在相关程序的启动参数里增加CA证书、自己的证书等相关参数

第一步,设置kube-apiserver的CA证书及启动参数
在Master上创建CA证书和私钥相关文件
openssl genrsa -out ca.key 2048 #生成ca.key文件
openssl req -x509 -new -nodes -key ca.key -subj "/CN=k8s-master" -days 5000 -out ca.crt #生成ca.crt文件
#注:-subj参数中/CN的值为Master主机名
openssl genrsa -out server.key 2048 #生成server.key文件
准生master_ssl.cnf文件,用于x509 v3版证书,需设置Master服务器的hostname(k8s-master),IP地址(192.168.10.130),以及k8s的虚拟服务名称(kubernetes.default)和该虚拟服务的ClusterIP(169.169.0.1)
vi master_ssl.cnf

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
DNS.5 = k8s-master
IP.1 = 169.169.0.1
IP.2 = 192.168.10.130

基于master_ssl.cnf创建server.csr和server.crt文件
openssl req -new -key server.key -subj "/CN=k8s-master" -config master_ssl.cnf -out server.csr #生成server.csr文件
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 5000 -extensions v3_req -extfile master_ssl.cnf -out server.crt #生成server.crt文件
mkdir -p /opt/kubernetes/ca
cp ca.crt ca.key ca.srl server.crt server.csr server.key master_ssl.cnf /opt/kubernetes/ca
修改kube-apiserver启动参数,添加--client-ca-file,--tls-cert-file,--tls-private-key-file即CA根证书文件,服务端证书和服务端私钥文件
同时关掉非安全端口8080,使用安全端口6443(默认值),最后重启kube-apiserver服务
vi apiserver
KUBE_API_ARGS="--storage-backend=etcd3 --etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=0 --secure-port=6443 --client-ca-file=/opt/kubernetes/ca/ca.crt --tls-private-key-file=/opt/kubernetes/ca/server.key --tls-cert-file=/opt/kubernetes/ca/server.crt --service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535 --admission_control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota --logtostderr=false --log-dir=/opt/kubernetes/kube-apiserver/logs --v=2"
systemctl restart kube-apiserver

第二步,设置kube-controller-manager的客户端证书、私钥和启动参数
openssl genrsa -out cs_client.key 2048 #生成cs_client.key文件
openssl req -new -key cs_client.key -subj "/CN=k8s-master" -out cs_client.csr #生成cs_client.csr文件
openssl x509 -req -in cs_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out cs_client.crt -days 5000  #生成cs_client.crt文件
cp cs_client.key cs_client.csr cs_client.crt /opt/kubernetes/ca
创建/opt/kubernetes/ca/kubeconfig文件,该文件kube-controller-manager和kube-scheduler共用,配置客户端证书等相关参数

修改kube-controller-manager服务启动参数
vi controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--master=https://192.168.10.130:6443 --service-account-private-key-file=/opt/kubernetes/ca/server.key --root-ca-file=/opt/kubernetes/ca/ca.crt --kubeconfig=/opt/kubernetes/ca/kubeconfig --logtostderr=false --log-dir=/opt/kubernetes/kube-controller-manager/logs --v=2"
systemctl restart kube-controller-manager
systemctl status kube-controller-manager

第三步,设置kube-scheduler启动参数
kube-scheduler复用上一步kube-controller-manager创建的客户端证书
vi scheduler
KUBE_SCHEDULER_ARGS="--master=https://192.168.10.130:6443 --kubeconfig=/opt/kubernetes/ca/kubeconfig --logtostderr=false --log-dir=/opt/kubernetes/kube-scheduler/logs --v=2"
systemctl restart kube-scheduler
systemctl status kube-scheduler

第四步,设置Node上kubelet客户端证书、私钥和启动参数
复制kube-apiserver的ca.crt和ca.key到Node上
生成kubelet_client.crt时-CA和-CAkey使用aipserver的ca.crt和ca.key文件
生成kubelet_client.csr时,将-subj参数的/CN值设置为本Node的IP
mkdir -p /opt/kubernetes/ca
scp root@192.168.10.130:/opt/kubernetes/ca/ca.crt .
scp root@192.168.10.130:/opt/kubernetes/ca/ca.key .
openssl genrsa -out kubelet_client.key 2048 #生成kebelet_client.key文件
openssl req -new -key kubelet_client.key -subj "/CN=192.168.10.150" -out kubelet_client.csr #生成csr文件
openssl x509 -req -in kubelet_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out kubelet_client.crt -days 5000 #生成kubelet_client.crt文件
创建/opt/kubernetes/ca/kubeconfig文件,kubelet和kube-proxy共用,配置客户端证书等相关参数
vi /opt/kubernetes/ca/kubeconfig

设置kubelet启动参数
vi kubelet
KUBELET_ARGS="--api-servers=https://192.168.10.130:6443 --kubeconfig=/opt/kubernetes/ca/kubeconfig --hostname-override=192.168.10.150 --logtostderr=false --log-dir=/opt/kubernetes/kubelet/logs --v=2"
重启kubelet服务
systemctl restart kubelet
systemctl status kubelet

第五步,设置kube-proxy启动参数
kube-proxy复用上一步为kubelet创建的客户端证书,配置启动参数:
vi proxy
KUBE_PROXY_ARGS="--master=https://192.168.10.130:6443 --kubeconfig=/opt/kubernetes/ca/kubeconfig --logtostderr=false --log-dir=/opt/kubernetes/kube-proxy/logs --v=2"
重启kube-proxy服务
systemctl restart kube-proxy
systemctl status kube-proxy
至此,基于CA的双向数字证书认证的K8s集群环境就搭建完成

第六步,设置kubectl客户端使用安全方式访问apiserver
在使用kubectl对K8s集群进行操作时,默认使用非安全端口8080对apiserver访问,也可以设置为安全访问apiserver的模式
需要相关参数为--certificate-authority,--client-certificate,--client-key分别为CA授权证书、客户端证书和客户端密钥
所以最后是:
kubectl --server=https://192.168.10.130:6443 --certificate-authority=/opt/kubernetes/ca/ca.crt --client-certificate=/opt/kubernetes/ca/cs_client.crt --client-key=/opt/kubernetes/ca/cs_client.key get nodes

基于HTTP BASE或TOKEN的简单认证方式

基于http base或token的简单认证方式各组件与apiserver的通信方式仍然采用https,API Server对外暴露HTTPS端口,客户端提供用户名、密码或者Token来完成认证过程
kubectl同时支持CA双向认证与简单认证两种模式与apiserver通信
其他客户端只能采用双向安全认证或非安全模式和apiserver通信

1)基于HTTP BASE认证的配置
1.1)创建包括用户名、密码、UID的文件basic_auth_file,用户名、密码都是明文
vi basic_auth_file
admin,admin,1
1.2)设置kube-apiserver启动参数--basic-auth-file,使用上述文件提供安全认证
--secure-port=6443
--basic-auth-file=/opt/kubernetes/ca/basic_auth_file
重启API Server
1.3)使用kubectl通过指定用户名和密码访问API Server
kubectl --server=https://192.168.10.130:6443 --username=admin --password=admin --insecure-skip-tls-verify=true get nodes
注意,为方便操作,设置alias,若要长期生效,写入/etc/bashrc中
alias kubectl='kubectl --server=https://192.168.10.130:6443 --certificate-authority=/opt/kubernetes/ca/ca.crt --client-certificate=/opt/kubernetes/ca/cs_client.crt --client-key=/opt/kubernetes/ca/cs_client.key'

2)基于TOKEN认证的配置过程
2.1)创建包括用户名、密码、UID的文件token_auth_file,用户名、密码都是明文
vi basic_auth_file
admin,admin,1
1.2)设置kube-apiserver启动参数--token-auth-file,使用上述文件提供安全认证
--secure-port=6443
--basic-auth-file=/opt/kubernetes/ca/token_auth_file
重启API Server
1.3)使用curl验证和访问API Server
curl -k --header "Authorization:Bearer admin" https://192.168.10.130:6443/version

Kubernetes集群的网络配置

跨主机的容器间网络互通。K8s并不会对跨主机的容器网络进行设置,需要额外的工具实现,如Flannel、Open vSwitch、Weave、Calico等。优先使用CNI网络插件打通主机容器网络

内网中K8s相关配置

无Internet访问的情况。创建内部私有Docker Registry,并修改kubelet配置,启动内网K8s集群

1、Docker Private Registry私有Docker镜像库
官方文档:https://docs.docker.com/registry/deploying/

2、kubelet配置
K8s以Pod为管理单元,在kubelet创建Pod时,需要启动一个镜像:gcr.io/google_containers/pause
可以指定为其他仓库中的镜像
--pod-infra-container-image=hub.c.163.com/allan1991/pause-amd64:3.0

vi kubelet
KUBELET_ARGS="--api-servers=https://192.168.10.130:6443 --kubeconfig=/opt/kubernetes/ca/kubeconfig --hostname-override=192.168.10.150 --pod-infra-container-image=hub.c.163.com/allan1991/pause-amd64:3.0 --logtostderr=false --log-dir=/opt/kubernetes/kubelet/logs --v=2"
重启kubelet服务
systemctl restart kubelet

K8s版本升级

不要让当前集群中正在运行的容器受到影响,对集群中各Node逐个隔离,然后等待其上运行的容器全部执行完成,再更新kubelet和kube-proxy服务,全部Node更新完成后,最后更新Master的服务

 

转载请注明:轻风博客 » 从Docker到Kubernetes实践全接触(二)实践指南_安装配置

喜欢 (1)or分享 (0)