K8S安装
K8S安装(非生产环境)
1、初始环境
前面是内网IP 后面是外网IP
==========================================
t1 master 10.105.79.74 123.xxx.205.192
t2 worker 10.105.90.27 123.xxx.185.178
t3 worker 10.154.6.123 115.xxx.74.23
==========================================
目标环境
Kubernetes v1.16.0
--- calico 3.8.2
--- nginx-ingress 1.5.5
Docker 18.09.7
2、检查 centos / hostname
# 在 master 节点和 worker 节点都要执行
cat /etc/redhat-release
# 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字
# 不能使用 localhost 作为节点的名字
hostname
# 请使用 lscpu 命令,核对 CPU 信息
# Architecture: x86_64 本安装文档不支持 arm 架构
# CPU(s): 2 CPU 内核数量不能低于 2
lscpu
3、修改 hostname
# 修改 hostname
hostnamectl set-hostname your-new-host-name(t1 t2 t3)
# 查看修改结果
hostnamectl status
# 设置 hostname 解析
echo "127.0.0.1 $(hostname)" >> /etc/hosts
4、安装 docker / kubelet
分别登录三台机器执行
curl -sSL https://kuboard.cn/install-script/v1.16.0/install-kubelet.sh | sh
5、初始化 master 节点
# 只在 master 节点执行
# 替换 x.x.x.x 为 master 节点实际 IP(请使用内网 IP)
# export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令
export MASTER_IP=x.x.x.x //export MASTER_IP=10.105.79.74
# 替换 apiserver.demo 为 您想要的 dnsName (不建议使用 master 的 hostname 作为 APISERVER_NAME)
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/20
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.16.0/init-master.sh | sh
6、检查 master 初始化结果
# 只在 master 节点执行
# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide
# 查看 master 节点初始化结果
kubectl get nodes -o wide
[root@t1 install]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
t1 Ready master 2m57s v1.16.0 10.105.79.74 <none> CentOS Linux 7 (Core) 3.10.0-957.21.3.el7.x86_64 docker://18.9.7
7、初始化 worker节点
# 只在 master 节点执行
kubeadm token create --print-join-command
可获取kubeadm join 命令及参数,如下所示
# kubeadm token create 命令的输出
kubeadm join apiserver.demo:6443 --token pxq7n7.j7l9qk87mu9a3isd --discovery-token-ca-cert-hash sha256:d0271acf4302e5e31f23e3fbc77b4f451196681fc5900d72f6a763ffec5f1bbf
所有节点上
# 只在 worker 节点执行
# 替换 ${MASTER_IP} 为 master 节点实际 IP
# 替换 ${APISERVER_NAME} 为初始化 master 节点时所使用的 APISERVER_NAME
export MASTER_IP=10.105.79.74
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
# 替换为 master 节点上 kubeadm token create 命令的输出
kubeadm join apiserver.demo:6443 --token pxq7n7.j7l9qk87mu9a3isd --discovery-token-ca-cert-hash sha256:d0271acf4302e5e31f23e3fbc77b4f451196681fc5900d72f6a763ffec5f1bbf
8、检查初始化结果
# 只在 master 节点执行
kubectl get nodes -o wide
[root@t1 install]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
t1 Ready master 12m v1.16.0
t2 Ready <none> 3m9s v1.16.0
t3 Ready <none> 2m36s v1.16.0
9、移除 worker 节点
在准备移除的worker节点上执行
kubeadm reset
在 master节点上执行
# 只在 master 节点执行
kubectl delete node demo-worker-x-x
10、安装 Ingress Controller
在 master节点上执行
kubectl apply -f https://kuboard.cn/install-script/v1.16.0/nginx-ingress.yaml
11、安装Kuboard
# 安装
kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
#获取管理员登录Token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}')
[root@t1 install]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}')
Name: kuboard-user-token-bcdqp
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: kuboard-user
kubernetes.io/service-account.uid: dfe0a2df-883a-40b8-8e03-ea6f9b445e36
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IktXN19Dcl91Nm1NV01JTE5lOXQ2dWlQLXB6M0l5WnZsVEdCR2dqZkw3U0EifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXVzZXItdG9rZW4tYmNkcXAiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoia3Vib2FyZC11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZGZlMGEyZGYtODgzYS00MGI4LThlMDMtZWE2ZjliNDQ1ZTM2Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmt1Ym9hcmQtdXNlciJ9.kRwnI3DRDIoobgkwzzXKNCBOr1570Mp8ZMsp4b2tCpKm45pQS7IH-yFAE_sddSin4tbUxiu2ps7_vJW-EJw8f8S49S0tN9ah91vXrFgt1-ZU33m_P6qBqI2hdjtf21L-F8jJyES4sFRvO0PDfV_W6JN5BOstBRZKKwjxnNMZ5wfdFtPfb47Cl3EeB_2_12BVoVYGC4USZ9XFoJq7MLKFo5LJPe5ZQC22HQyrGCdpVK_zvcXfbRyAxwIMZEchvZUuR7FRQuSFEXo_SbxNFgvNXlSOPO6FXs4vDz0w-q8rUj1l-wy4CW9eAXclH8r0FcFZuNGFplQhieZebGXml-svtQ
#获取只读用户登录Token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-viewer | awk '{print $1}')
#访问Kuboard
http://123.xxx.185.178:32567/
未来配置https访问方式
#卸载
kubectl delete -f https://kuboard.cn/install-script/kuboard.yaml
12、外网负载均衡 配置Let’s Encript SSL证书
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v0.10.0/cert-manager.yaml
13、kubctr命令自动补齐
source <(kubectl completion bash)
永久生效
yum install bash-completion -y
echo "source <(kubectl completion bash)" >> ~/.bashrc
14、查看、创建命令空间
步骤一:理解默认的命名空间
$ kubectl get namespaces
步骤二:创建新的命名空间
使用kubectl创建这个开发命名空间和生产命名空间
$ kubectl create -f namespace-dev.json
$ kubectl create -f namespace-prod.json
查看结果
$ kubectl get namespaces --show-labels
步骤三:在每个命名空间中创建Pods
首先检查上下文
$ kubectl config view
下一步是为kubectl客户端定义在每个命名空间工作的上下文。“集群”和“用户”域的值是从当前上下文拷贝过来的
$ kubectl config set-context dev --namespace=development --cluster=kubernetes --user=kubernetes-admin
$ kubectl config set-context prod --namespace=production --cluster=kubernetes --user=kubernetes-admin
切换到dev命名空间
kubectl config use-context dev
切换到prod命名空间
kubectl config use-context prod
附录:各个脚本内容
1、namespace-dev.json
{
"kind": "Namespace",
"apiVersion": "v1",
"metadata": {
"name": "development",
"labels": {
"name": "development"
}
}
}
2、namespace-prod.json
{
"kind": "Namespace",
"apiVersion": "v1",
"metadata": {
"name": "production",
"labels": {
"name": "production"
}
}
}
参考:
1、安装教程 - https://kuboard.cn/install/install-k8s.html
2、客户端控制远程K8S - https://kuboard.cn/install/install-kubectl.html#%E9%85%8D%E7%BD%AE-kubectl-%E5%AE%A2%E6%88%B7%E7%AB%AF
3、NGINX Ingress Controller 1.5.6 - https://github.com/nginxinc/kubernetes-ingress/releases
4、生产环境请-安装Kubernetes高可用 - https://kuboard.cn/install/install-kubernetes.html - https://www.kubernetes.org.cn/5904.html