分类目录归档:docker

v2ray搭建部署2

一、服务端

version: "3"
 
services:
  v2ray:
    image: v2ray/official
    container_name: v2ray
    restart: always
    command: v2ray -config=/etc/v2ray/config.json
    ports:
      - "8888:80"
    volumes:
      - ./data:/etc/v2ray
      - ./v2ray.config.json:/etc/v2ray/config.json:ro
{
	"log": {
		"access": "/var/log/v2ray/access.log",
		"error": "/var/log/v2ray/error.log",
		"loglevel": "warning"
	},
	"inbound": {
		"port": 80,
		"protocol": "vmess",
		"settings": {
			"clients": [{
				"id": "01947a19-d50f-40ad-a3e0-7d25081f82a7",
				"level": 1,
				"alterId": 100
			}]
		},
		"streamSettings": {
			"network": "tcp",
			"tcpSettings": {
				"header": {
					"request": {
						"path": [
							"/"
						],
						"version": "1.1",
						"method": "GET",
						"headers": {
							"Host": "www.baidu.com",
							"Connection": [
								"keep-alive"
							],
							"Accept-Encoding": [
								"gzip, deflate"
							],
							"Pragma": "no-cache",
							"User-Agent": [
								"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
								"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46"
							]
						}
					},
					"type": "http",
					"response": {
						"status": "200",
						"headers": {
							"Transfer-Encoding": [
								"chunked"
							],
							"Connection": [
								"keep-alive"
							],
							"Content-Type": [
								"application/octet-stream",
								"video/mpeg"
							],
							"Pragma": "no-cache"
						},
						"reason": "OK",
						"version": "1.1"
					}
				},
				"connectionReuse": true
			}
		}
	},
	"outbound": {
		"protocol": "freedom",
		"settings": {}
	},
	"outboundDetour": [{
		"protocol": "blackhole",
		"settings": {},
		"tag": "blocked"
	}],
	"routing": {
		"strategy": "rules",
		"settings": {
			"rules": [{
				"type": "field",
				"ip": [
					"0.0.0.0/8",
					"10.0.0.0/8",
					"100.64.0.0/10",
					"127.0.0.0/8",
					"169.254.0.0/16",
					"172.16.0.0/12",
					"192.0.0.0/24",
					"192.0.2.0/24",
					"192.168.0.0/16",
					"198.18.0.0/15",
					"198.51.100.0/24",
					"203.0.113.0/24",
					"::1/128",
					"fc00::/7",
					"fe80::/10"
				],
				"outboundTag": "blocked"
			}]
		}
	}
}

客户端

安装ISTIO-1.6.8版本

承接上K8s的安装教程,继续安装ISTIO。

K8s离线版本安装全过程


因为ISTIO具备完整的监控,包括grafana/prometheus等,故需要先删除原集群的相关监控,然后按istio方式部署。
第一步:检查目标K8s是否满足安装istio的条件。

istio x precheck

第二步:安装示范DEMO

istioctl install --set profile=demo
安装结束后,可用命令检查是否安装完整
 istioctl verify-install

K8s离线版本安装全过程

本人克隆了一份:https://gitee.com/kxtry/K8s
原来开源位置:https://gitee.com/q7104475/K8s
本人环境配置:
Master节点 : 172.16.3.244
工作节点 : 172.16.3.245 172.16.3.248
必须保证所有节点密码一致,且以root帐号运行。
第一步:下载离线包:

本人百度云盘:
链接:https://pan.baidu.com/s/1Dok1vqn8G0AhUkl_l12e6Q 
提取码:09cu 
或者去开源仓库下载:http://www.linuxtools.cn:42344/K8s_1.3.2.tar
http://www.linuxtools.cn:42344/目录下,有很多宝贝。
http://www.linuxtools.cn:42344/K8s_list/是K8s离线下载包。

第二步:上传至master机【如果master多台,则只需要上传其中一台就可以了,但必须是master的节点,其它节点执行脚本,会出部署故障。】
第三步:进入解压K8s目录【这个目录不能修改,修改为其它可能会有问题】,执行install.sh脚本。
第四步:选择”Cluster K8s One-click”项。

第五步:确认导入集群IP列表


注:默认第一个IP为Master-1。
第六步:选择集群FS,选择NFS模式,【不要选择GlusterFS类型,因为其要求挂载没有格式化的磁盘】

第七步:输入Root密码【集群中每台主机的root帐号密码都必须一致】

第八步:再次确认MasterIP

第九步:大约10分钟的安装等待
因为它是采用ansible推送的方式安装,它是会主动连接每台主机,把当前解压包内的相关文件推送至相关集群机上安装
第十步:安装完成,提示相关服务的访问方式

第十一步:检查服务健康状态和清理安装临时文件,这步骤所有安装执行完毕。
———————————————————————————-
在1.3.2离线安装包上,会存在NFS没有正确安装的情况,故需要手动再补一刀,如下情况所示:

解决方法:

sh  /root/K8s/nfs/nfs_install.sh


———————————————————————————
因为本离线kubectl已经赋加相关权限,故没有安装其它应用如ISTIO,是不需要生成admin.kubeconfig配置的。
但有部分应用可能引用~/.kube/config,也即admin.kubeconfig配置,故可按以下方式生成。
vim generate_admin_kubeconfig.sh文件

#!/bin/sh
MASTER_IP=$1
if [ "${MASTER_IP}" == "" ];then
   echo "should add master ip parameter"
   exit
fi
 
cd /etc/kubernetes/ssl
cat > admin-csr.json  <<  'EOF'
{
    "CN": "admin",
    "hosts": [],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "beijing",
            "L": "beijing",
            "O": "od",
            "OU": "ops"
        }
    ]
}
EOF
 
cfssl_linux-amd64 gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson_linux-amd64 -bare admin
 
#生成集群配置文件
kubectl config set-cluster myk8s \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=https://${MASTER_IP}:6443 \
--kubeconfig=kube-admin.kubeconfig
 
# 设置admin管理账号
kubectl config set-credentials admin \
--client-certificate=/etc/kubernetes/ssl/admin.pem \
--client-key=/etc/kubernetes/ssl/admin-key.pem \
--embed-certs=true \
--kubeconfig=kube-admin.kubeconfig
 
#绑定账号和管理的集群
kubectl config set-context myk8s-context \
--cluster=myk8s \
--user=admin \
--kubeconfig=kube-admin.kubeconfig
 
#选择指定集群 一般在需要远程控制的机器上操作
kubectl config use-context myk8s-context --kubeconfig=kube-admin.kubeconfig
 
#绑定账号到指定的角色
cat  >  k8s-admin.yaml  << 'EOF'
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: admin
EOF
 
kubectl apply -f k8s-admin.yaml
kubectl get clusterrolebinding  admin   -o yaml
 
cp kube-admin.kubeconfig ~/.kube/config -f

kubespray国内加速脚本

因为墙的原因,无法下载国外文件,因此需要将某些下载域名转换成国内镜像域名。

参考:https://gitee.com/kxtry/kubespray-k8s-installation/tree/master
-----------------------------
#参照gcr.io替换所有域名
grep -rl 'gcr.io' ./|xargs sed -i "s/gcr.io/gcr.azk8s.cn/g"
grep -rl 'quay.io' ./|xargs sed -i "s/quay.io/quay.azk8s.cn/g"
 
docker.io -> dockerhub.azk8s.cn (其中官方镜像需要加library/)
quay.io ->  quay.azk8s.cn
gcr.io -> gcr.azk8s.cn
k8s.gcr.io -> gcr.azk8s.cn/google-containers
-----------------------------------------------
vim roles/container-engine/docker/defaults/main.yml修改以下内容。
docker_rh_repo_base_url: 'https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable'
docker_rh_repo_gpgkey: 'https://mirrors.aliyun.com/docker-ce/linux/centos/gpg'
 
# CentOS/RedHat Extras repo
extras_rh_repo_base_url: "https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/"
extras_rh_repo_gpgkey: "https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7"

K8s安装过程

通过kubespray实现k8s的安装记录【https://github.com/kubernetes-sigs/kubespray】。
所使用的分支是release-2.11。\
——————kubespray加速方案—————-
https://github.com/wiselyman/k8s-installation
https://blog.csdn.net/zhouzixin053/article/details/104418164

烂泥:docker.io、gcr.io、quay.io镜像加速(20200413更新)


—————–禁用IPV6————————-
以下是Centos7.8的祼系统的安装部署过程。
操作前必须禁用IPV6,否则在安装docker等默认使用ipv6连接。
如下图:

彻底禁用IPV6方法:http://www.kxtry.com/archives/3044

——————————————
虚拟机配置:2核4G, IP: 192.168.10.130 192.168.10.134
第一步:在执行kubespray脚本前的环境准备,从release-2.11这个版本,默认是使用python3来安装了,故需要安装python3。
注:请不要使用python2进行安装,本人经验证确认在执行【CONFIG_FILE=inventory/myk8s/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}】动作时,会出错,且无法解决。

1.yum install -y python3 python3-pip python3-devel
2.mkdir -p ~/.pip/ && vi ~/.pip/pip.conf,添加如下内容:
[global]
index-url=http://mirrors.aliyun.com/pypi/simple    【尽量不要使用https的源,有可能某些源会严格检查SSL是否过期之类,从而导致安装出错】
trusted-host=mirrors.aliyun.com

第二步:配置服务器免密互信

ssh-keygen -t rsa -C "abc@admin.com"
ssh-copy-id 192.168.10.130

第三步,安装必须组件。

1.pip3 install -r requirements.txt

直至最后提示以下成功信息

第三步:进入kubespray的release-2.11分支安装单机版本。

mkdir inventory/myk8s
declare -a IPS=(192.168.10.137 192.168.10.138) 【这里是空格隔开,不是逗号】
CONFIG_FILE=inventory/myk8s/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
ansible-playbook -i inventory/myk8s/hosts.yml --become --become-user=root cluster.yml  -vvv --flush-cache【-vvv是显示安装细节过程,--flush-cache是清理操作缓存】

—————————-
加快安装效率及降低翻墙影响,可直接下载K8s离线包。
http://linuxtools.cn:42344/K8s_list/

ISTIO的版本依赖

ISTIO的版本支持情况。
公司支持的版本是K8S-1.15.7和ISTIO-1.6
https://istio.io/latest/docs/setup/platform-setup/

Istio 1.6 has been tested with these Kubernetes releases: 1.15,1.16, 1.17, 1.18

docker-compose的陷阱

docker-compose如果不配置network属性,则会创建一个新的子网,而这个子网的网段极有可能与某个内网网段发生冲突。
所以最好在docker-compose.yml中增加network属性配置。
docker-compose启动服务的过程包括以下过程:
第一步创建子网网桥。可以通过”ip route”获取到相关子网IP。
第二步按服务依赖启动服务

{
"bip":"192.168.55.1/24"
}
<pre>
<pre lang="geshi">
networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "false"
    ipam:
      driver: default
      config:
        - subnet: 192.168.56.0/24

MQTT

MQTT服务器非常多,如apache的ActiveMQ,emtqqd,HiveMQ,Emitter,Mosquitto,Moquette等等。

使用容器Mosquitto的MQTT实现。

mosquitto_sub -t ‘test/topic’ -c -i id -q 1
mosquitto_pub -t ‘test/topic’ -m ‘hello world23334’ -q 1

mosquitto_sub -t ‘test/topic’ -c -i id -q 1 -u abc -P 123
mosquitto_pub -t ‘test/topic’ -m ‘hello world23334’ -q 1 -u abc -P 123

枚举问题POD及输出其问题

1.获取当前所有的命名空间
kubectl get ns
2.遍历命名空间,检查非Running状态的容器如ImagePullBackOff/ContainerCreating等,如下。
kubectl get pods -n kube-system

 [root@k8smaster ~]# kubectl get pods -n kube-system
NAME                                       READY   STATUS              RESTARTS   AGE
calico-kube-controllers-5b8b769fcd-lsjt4   1/1     Running             2          6d3h
calico-node-6l6r4                          1/1     Running             2          6d2h
calico-node-gt95n                          1/1     Running             2          6d3h
coredns-546565776c-4bn2d                   1/1     Running             2          6d3h
coredns-546565776c-cwpk7                   1/1     Running             2          6d3h
etcd-k8smaster                             1/1     Running             2          6d3h
kube-apiserver-k8smaster                   1/1     Running             3          6d3h
kube-controller-manager-k8smaster          1/1     Running             2          6d3h
kube-proxy-7s8dw                           1/1     Running             2          6d2h
kube-proxy-cbgtv                           1/1     Running             2          6d3h
kube-scheduler-k8smaster                   1/1     Running             2          6d3h
kuboard-7bb89b4cc4-bk7d4                   0/1     ContainerCreating   0          15m
metrics-server-7f96bbcc66-qjk5b            0/1     ContainerCreating   0          15m

3.获取问题POD的输出内容。

kubectl describe pod kuboard-7bb89b4cc4-bk7d4 --namespace=kube-system